思路:不能使用递归!会有大量重复计算!比如计算f(n),需要先计算f(n-2)和f(n-1),计算f(n-2)需要f(n-3)和f(n-4),计算f(n-1)需要f(n-2)和f(n-3),产生重复计算。
应该考虑使用动态规划方法,初始化a=0,b=1,sum=a+b,可以用sum使a和b交替前进。
class Solution {
public int fib(int n) {
int a = 0, b = 1, sum;
for (int i = 0; i < n; i++){
sum = (a + b)%1000000007;
a = b;
b = sum;
}
return a;
}
}
时间复杂度O(N),空间复杂度O(1)