LeetBook刷题笔记008:斐波那契数(Java实现)
题目
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n)
最优解:动态规划_非递归
public int fib(int n) {
//注意n=0时直接返回否则后面会数组越界
//n=1时值就为n已经一起返回
if(n<2)
return n;
//dp[n]表示前n-1和n-2的元素和
int[] dp=new int[n+1];
//初始化原始值
dp[0]=0;
dp[1]=1;
//自底向上递推
for(int i=2;i<=n;i++)
dp[i]=dp[i-1]+dp[i-2];
return dp[n];
}
最优解:动态规划_递归
public int fib(int n) {
//创建dp数组记录元素相加和防止重复计算
int[] dp=new int[n+1];
return digui(n,dp);
}
public int digui(int n,int[] dp){
//终止条件直接返回
if(n<2)
return n;
//记录元素相加结果
if(dp[n]==0)
dp[n]=digui(n-1,dp)+digui(n-2,dp);
//若历史运算过则直接得出结果返回
return dp[n];
}