这道题第一反应是用递归,但是递归时间复杂度会是2^n,且会有大量重复计算。考虑动态规划,倒过来从开头开始一个个计算即可。需要注意题目要求要模1000000007,且int可能会溢出。
class Solution {
public int fib(int n) {
int[] fibArray = new int[n];
if(n == 0){
return 0;
}
if(n == 1){
return 1;
}
if(n == 2){
return 1;
}
else{
fibArray[0] = 1;
fibArray[1] = 1;
for(int i=2;i<n;i++){
fibArray[i] = (fibArray[i-1] + fibArray[i-2])% 1000000007;
}
}
return fibArray[n-1] ;
}
}