斐波那契数列中若求fib(n),则fib(n)只跟fib(n-1)和fib(n-2)有关,与之前所有项无关,所以只用两个临时变量储存fib(n-1)和fib(n-2)即可。
边界条件为 f(0) == 0,f(1) == 1.
public class Solution {
public int Fibonacci(int n) {
if(n == 0)
return 0;
if(n == 1)
return 1;
int first=1;
int second=0;
int sum=1;
for(int i=2;i<=n;i++)
{
sum=first+second;
second=first;
first=sum;
}
return sum;
}
}
//自顶向下记忆化方式
private int data[]=new int [100];//不能确定index时,使用容器会发生下标越界;
//所以自顶向下记忆化方式适用于本身n大小已知,可以自定义一个固定大小数组的情况;
public int fib(int n)
{
if(n==0)
return 0;
if(n==1)
return 1;
if(data[n-1]==0)
data[n-1]=fib(n-1);
if(data[n-2]==0)
data[n-2]=fib(n-2);
return data[n-1]+data[n-2];
}