1. 题目
2. 思路
方法1:递归,但是有很多重复计算
方法2:带备忘录的递归:自顶向下,带备忘录可以避免重复计算
方法3:动态规划(自底向上),与递推类似(递推参考:https://mp.weixin.qq.com/s/mJ_jZZoak7uhItNgnfmZvQ)
此法只能计算一个数,而带备忘录的是计算出所有数再返回。
- 让a,b一直往下变化,则就可以自底(0)向上(n)计算出 f(n)
3. 代码
- 时间O(N),空间O(1)
class Solution {
public int fib(int n) {
int a = 0;
int b = 1;
int sum;
for(int i=0; i<n; i++){
sum = (a+b)%1000000007;
a = b;
b = sum;
}
return a;
}
}