这是博主第二次刷这个题目,经典题目的经典算法,斐波那契数列可以采用递归来进行求解,但是如果要求的数字比较大的情况下,会出现重复计算的问题,复杂度比较高,所以我们本次采用的是非递归的方法,极大的降低了时间和空间复杂度。

题目描述

二刷--斐波那契数列_复杂度

解题思路

  • 如果目标值小于等于1,则直接返回。
  • 如果目标值大于等于1,则定义两个临时变量保存前两个数字。
  • 通过循环的方法不断更新这两个值,即可求出最终的解。

AC代码

由于leetcode上需要进行取余计算,我们只需要给结果去个余即可。

var fib = function (n) {
    if (n <= 1) return n;

    let prev1 = 1;
    let prev2 = 0;
    let result = 0;

    for (let i = 2; i <= n; i++) {
        result = (prev1 + prev2) % 1000000007;
        prev2 = prev1;
        prev1 = result;
    }
    return result;
};

题目反思

  • 学会使用非递归的方法求解斐波那契数列来降低算法的复杂度。