LeetCode第509题:斐波那契数列

218 阅读1分钟

题干

斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 01 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0F(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站代码随想录的。主要有以下几点:

  1. 找到dp数组以及下标的含义
  2. 总结递推公式
  3. dp数组如何初始化
  4. 确定遍历的顺序
  5. 举例验证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]
  };