大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
n<=39
//刚开始想使用递归算法
public class Solution {
public int Fibonacci(int n) {
if(n<=1) return n;
else return Fibonacci(n-1)+Fibonacci(n-2);
}
}
//但是空间复杂度和时间复杂度过高,导致溢出
//然后开始想着用动态规划的算法
public class Solution {
public int Fibonacci(int n) {
int a=0,b=1;
if(n<=1) return n;
int t=1;
while(t<n){
if(a>b) b=a+b;
else a=a+b;
++t;
}
return a>b?a:b;
}
}
//然后不信邪,递归用下简单的备忘录的想法
public class Solution {
private int flag[];
public int Fibonacci(int n) {
flag=new int[n+1];
return f(n);
}
public int f(int n){
if(n<=1){flag[n]=n;return n;}
flag[n]=((flag[n-1]!=0)?flag[n-1]:f(n-1))+((flag[n-2]!=0)?flag[n-2]:f(n-2));
return flag[n];
}
}
//感觉好麻烦啊!