斐波那契数列(限制30位)
递归解法
class Solution {
public int fib(int N) {
if(N==0)
return 0;
if(N==1)
return 1;
return fib(N-1)+fib(N-2);
}
}
自底向上DP解法
class Solution {
public int fib(int N) {
int[] record = new int[30];
record[0] = 0;
record[1] = 1;
for(int i=2; i<30; i++) {
record[i] = record[i-2] + record[i-1];
}
if(N==0 || N==1)
return record[N];
return record[N-1]+record[N-2];
}
}
自顶向下DP解法
class Solution {
int[] fibs = new int[31];
public int fib(int N) {
if(N<=1)
return N;
if(fibs[N]!=0)
return fibs[N];
else
return fibs[N] = fib(N-1) + fib(N-2);
}
}
迭代解法
class Solution {
public int fib(int N) {
if(N<=1)
return N;
int a = 0;
int b = 1;
int sum = a+b;
while(--N >1) {
a = b;
b = sum;
sum = a + b;
}
return sum;
}
}