题干
斐波那契数,通常用 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
思路:动态规划
这是一道经典的动态规划问题,一般我们做动态规划都会分五部曲,这个方法是看B站代码随想录的。主要有以下几点:
- 找到dp数组以及下标的含义
- 总结递推公式
- dp数组如何初始化
- 确定遍历的顺序
- 举例验证dp数组准确性
我们使用此方法来做这道最最基础的动规问题 :
1. 找到dp[i]数组以及下标的含义:数列第i个元素位置的值为dp[i]
2. 总结递推公式:实际上题目已经告诉了我们递推公式:F(n) = F(n - 1) + F(n - 2)
3. dp数组如何初始化:初始化值题目也已告诉我们F(0) = 0,F(1) = 1
4.确定遍历的顺序:我们后一个的值总是依赖当前值,所以我们遍历顺序是从前向后
第五步可以自己尝试
代码实现:
执行用时:88 ms, 在所有 JavaScript 提交中击败了56.08%的用户
内存消耗:37.7 MB, 在所有 JavaScript 提交中击败了28.19%的用户
var fib = function (n) {
// 非递归
let dp = [];
dp[0] = 0, dp[1] = 1;
for (let i = 0; i <= n; i++) {
if (i == 0 || i == 1) {
continue
}
dp[i] = dp[i - 1] + dp[i - 2]
}
return dp[n]
};