题目
斐波那契数,通常用F(n)表示,形成的序列称为斐波那契数列 。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1,
给你n,请计算F(n)。
示例1
输入: 2
输出: 1
解释: F(2) = F(1) + F(0) = 1 + 0 = 1
主要思路
- 首先创建一个数组dp,其中dp[i]表示题目中要求的
F(n)的值
- 然后递推公式在题目中已经给出来了:F(n) = F(n - 1) + F(n - 2)
- 由题目中可以知道dp[0] = 0,dp[1] = 1
- 最后dp[i]的值是由它前面两个数推出来的,所以数组是从前向后遍历
代码实现
public int fib(int n) {
if(n < 2){
return n
}
int[] dp = new int[n+1]
dp[0] = 0
dp[1] = 1
for(int i = 2
dp[i] = dp[i-1] + dp[i-2]
}
return dp[n]
}
代码优化
public int fib(int n) {
if(n < 2){
return n
}
// 从第一种实现方式可以发现dp[i]的值只与它前面两个值有关系,
// 所以可以用三个值来替换,不用数组来表示
int pre = 0
int cur = 0
int sum = 1
for(int i = 2
pre = cur
cur = sum
sum = pre + cur
}
return sum
}
参考
代码随想录