优化递归:
递归会重复计算大量重复的数据,所以需要数组把结果存储起来
public class Solution{
public int Fibonacci(int n){
int ans[]=new int[40];
ans[0]=0;
ans[1]=1;
for(int i=2;i<=n;i++){
ans[i]=ans[i-1]+ans[i-2];
}
return ans[n];
}
}
}
时间复杂度:O(n)
空间复杂度:O(n)
优化存储:
分析发现我们每次其实就是用到最近的两个数,所以我们只存储最近的两个数字
sum存储第n项
one存储n-1项
two存储n-2项
public class Solution{
public int Fibonacci(int n){
if(n==0){
return 0;
}else if(n==1){
return 1;
}
int sum=0;
int two=0;
int one=1;
for(int i=2;i<=n;i++){
sum=two+one;
two=one;
one=sum;
}
return sum;
}
}
时间复杂度O(n)
空间复杂度O(1)
参考链接