剑指offer JZ7 - 斐波那契数列 - JavaScript

1、题目描述

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:

F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

注意:由于测试数据会溢出 js 中的整数范围,所以请使用大数(bigint)类型!!!

本题和 LeetCode.509. 斐波那契数 一样!

2、解题思路

根据数学定义:f(n) = f(n - 1) + f(n - 2)。最初始情况是 f(0) = 0 和 f(1) = 1

因此直接循环更新即可。时间复杂度 O(N),空间复杂度 O(1)。

/**
 * @param {number} n
 * @return {number}
 */
function Fibonacci(n) {
    if (n === 0 || n === 1) {
        return n;
    }
 
    let a = 0,
        b = 1;
    for (let i = 2; i < n; ++i) {
        let c = a + b;
        a = b;
        b = c;
    }

    return (a + b) % 1000000007;
};

你可能感兴趣的:(Algorithm)