三种解题思路:
1 是递归 空间复杂度比较高
2 用一个数组保存 用循环将前N项的斐波那契 算出来,存到数组中 返回arr[N]
3 用三个数 第0个数 是0 第1个数是1 第三个数是前两个数之和,然后使用循环加赋值的方法 拿到第N个数。
//第一种:
class Solution {
public:
int Fibonacci(int n) {
if(n<1||n>39)
return 0;
if(n==1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
};
//第二种
#include <vector>
class Solution {
public:
int Fibonacci(int n) {
if(n<1||n>39)
return 0;
vector<int> arr;
arr[0]=0;arr[1]=1;
for(int i=2;i<=n;++i)
{
arr[i]=arr[i-1]+arr[i-2];
}
return arr[n];
}
};
//第三种:
class Solution {
public:
int Fibonacci(int n) {
if(n<1||n>39)
return 0;
if(n<2)
return 1;
int one=0;
int two=1;
int three=0;
for(int i=2;i<=n;++i)
{
three=one+two;
one=two;
two=three;
}
return three;
}
};