LeetCode 509 斐波那契数
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n
,请计算 F(n)
。
动态规划
此处已经给定了相应的状态转移方程,当前的决策是和前两个状态相关的,那么就需要从前向后递推。使用动态规划求解的步骤如下:
动规五部曲:
这里我们要用一个一维dp数组来保存递归的结果
1.确定dp数组以及下标的含义
dp[i]
的定义为:第i个数的斐波那契数值是 dp[i]
由于在计算时只需要使用到前两个状态,那么在就只需要保存前两个序列即可。
2.确定递推公式
状态转移方程 dp[i] = dp[i - 1] + dp[i - 2]
;
3.dp数组如何初始化
1 | dp[0] = 0; |
4.确定遍历顺序
从递归公式 dp[i] = dp[i - 1] + dp[i - 2]
;中可以看出,dp[i]
是依赖 dp[i - 1]
和 dp[i - 2]
,那么遍历的顺序一定是从前到后遍历的
5.举例推导dp数组
按照这个递推公式 dp[i] = dp[i - 1] + dp[i - 2]
,我们来推导一下,当N为10的时候,dp
数组应该是如下的数列:
0 1 1 2 3 5 8 13 21 34 55
1 | class Solution { |