c++
考查斐波那契数列的知识,
F[I]=F[I-1]+F[I-2];
F[0]=0; F[1]=1;
因此直接遍历,时间 ,空间
动态规划:
class Solution {
public:
int Fibonacci(int n) {
int temp1=0, temp2=1,ans=0;
if (n==0){
return 0;
}else if(n==1){
return 1;
}else{
for(int i=1; i<n; i++){
ans = temp1 + temp2;
temp1 = temp2;
temp2 = ans;
}
return ans;
}
}
};也可以直接利用数组,因为给定n<39,直接给出。
class Solution {
public:
int Fibonacci(int n) {
int f[40]={0};
f[0]=0;
f[1]=1;
for (int i=2; i<40; i++){
f[i]=f[i-1]+f[i-2];
}
return f[n];
}
};简化一点的 递归思路,时间 ,空间大:
class Solution {
public:
int Fibonacci(int n) {
if(n==0 || n==1){
return n;
}
return Fibonacci(n-1)+Fibonacci(n-2);
}
};保存结果 + 递归;这样,不需要重复计算。
class Solution {
public:
int Fib(int n, vector<int> &dp){
if(n==0 || n==1) return n;
if (dp[n] != -1) return dp[n];
return dp[n] = Fib(n-1, dp) + Fib(n-2, dp);
}
int Fibonacci(int n) {
vector<int> dp(45,-1);
return Fib(n, dp);
}
};
京公网安备 11010502036488号