题目描述
思路分析
f
[
0
]
=
0
;
f[0]=0;
f[0]=0;
f
[
1
]
=
f
[
2
]
=
1
;
f[1]=f[2]=1;
f[1]=f[2]=1;
f
[
i
]
=
f
[
i
−
1
]
+
f
[
i
−
2
]
;
f[i]=f[i-1]+f[i-2];
f[i]=f[i−1]+f[i−2];
方法1:递归 会爆栈
方法2:递推 可以过
方法3:矩阵乘法优化,复杂度
O
(
l
o
g
N
)
O(logN)
O(logN) 比较长,具体实现可以参考这篇别人的博客
代码实现
//递推 时间复杂度O(n)
class Solution {
public:
int Fibonacci(int n) {
if(n==0) return 0;
int a=1,b=1;
for(int i=1;i<=n-2;i++){
a=a+b;
int t=a;
a=b;
b=t;
}
return b;
}
};