这是博主第二次刷这个题目,经典题目的经典算法,斐波那契数列可以采用递归来进行求解,但是如果要求的数字比较大的情况下,会出现重复计算的问题,复杂度比较高,所以我们本次采用的是非递归的方法,极大的降低了时间和空间复杂度。
题目描述
解题思路
- 如果目标值小于等于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;
};
题目反思
- 学会使用非递归的方法求解斐波那契数列来降低算法的复杂度。