动态规划|509.斐波那契数

力扣题目链接

class Solution {
public:
    int fib(int N) {
        if (N <= 1) return N;
        vector<int> dp(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];
    }
};

动态规划

动规五部曲:

这里我们要用一个一维dp数组来保存递归的结果

  1. 确定dp数组以及下标的含义

dp[i]的定义为:第i个数的斐波那契数值是dp[i]

  1. 确定递推公式

为什么这是一道非常简单的入门题目呢?

因为题目已经把递推公式直接给我们了:状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];

  1. dp数组如何初始化

题目中把如何初始化也直接给我们了,如下:

dp[0] = 0;
dp[1] = 1;
  1. 确定遍历顺序

从递归公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,dp[i]是依赖 dp[i - 1] 和 dp[i - 2],那么遍历的顺序一定是从前到后遍历的

  1. 举例推导dp数组

按照这个递推公式dp[i] = dp[i - 1] + dp[i - 2],我们来推导一下,当N为10的时候,dp数组应该是如下的数列:

0 1 1 2 3 5 8 13 21 34 55

如果代码写出来,发现结果不对,就把dp数组打印出来看看和我们推导的数列是不是一致的。

自己的思路:

明白dp数组的含义

动态规划要注重递归

相关推荐

  1. 动态规划算法题记录】 509.

    2024-04-12 19:12:03       30 阅读
  2. 509.

    2024-04-12 19:12:03       63 阅读
  3. Leetcode 509

    2024-04-12 19:12:03       46 阅读
  4. LC509.

    2024-04-12 19:12:03       49 阅读
  5. 509.

    2024-04-12 19:12:03       51 阅读
  6. C++ 509.

    2024-04-12 19:12:03       29 阅读
  7. C/C++---------------LeetCode第509.

    2024-04-12 19:12:03       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 19:12:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 19:12:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 19:12:03       82 阅读
  4. Python语言-面向对象

    2024-04-12 19:12:03       91 阅读

热门阅读

  1. Yarn vs npm的大同小异&Yarn是什么?

    2024-04-12 19:12:03       38 阅读
  2. linux常用命令汇总

    2024-04-12 19:12:03       39 阅读
  3. leetcode热题HOT 200. 岛屿数量(深入理解DFS和BFS)

    2024-04-12 19:12:03       44 阅读
  4. 从入门到放弃:Docker基础教程

    2024-04-12 19:12:03       32 阅读
  5. 聚焦ChatGPT:让论文写作更高效更精准

    2024-04-12 19:12:03       38 阅读
  6. 个人微信api

    2024-04-12 19:12:03       41 阅读
  7. redis分桶路由方案及代码(项目功能模拟)

    2024-04-12 19:12:03       36 阅读
  8. sql执行过长,如何优化?--一起学习吧之数据库

    2024-04-12 19:12:03       41 阅读