思路1:
递归。
class Solution {
public:
int Num=1000000007;
int fib(int n) {
if(n==0){
return 0;
}
if(n==1){
return 1;
}
return (fib(n-1)%Num+fib(n-2)%Num)%Num;
}
};
结果:
n比较大的时候会超时。
思路2:
迭代。
class Solution {
public:
int Num=1000000007;
int fib(int n) {
long long int a=0,b=1,t;
while(n--){
t=a;
a+=b;
b=t;
if(a>Num){
a%=Num;
}
if(b>Num){
b%=Num;
}
}
return a;
}
};
结果:
居然过了!
思路3:
数组,动规。
class Solution {
public:
int Num=1000000007;
int fib(int n) {
vector<int> a(101);
a[0]=0;
a[1]=1;
int t=2;
while(t<=n){
a[t]=a[t-1]+a[t-2];
a[t]%=Num;
t++;
}
return a[n];
}
};
结果:
也过了!
思路4:
用数组进行递归。
class Solution {
public:
int Num=1000000007;
int a[101];
int fib(int n) {
if(n==0){
return 0;
}
if(n==1){
return 1;
}
a[n]=(fib(n-1)%Num+fib(n-2)%Num)%Num;
return a[n];
}
};
结果:
n比较大时超时了。