代码随想录:动态规划的问题
创始人
2025-05-28 08:01:07

卡哥对于动态规划的问题已经总结的很清楚了,我今天就是借着卡哥的代码随想录笔记,来做一个自己的笔记。

动态规划问题的主要种类:

  • 斐波拉契、爬楼梯、不同路径
  • 背包问题
  • 打家劫舍问题
  • 股票问题
  • 子序列问题

对于动态规划问题的五步曲:

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

选择一个基础来主要过一下五部曲:

509. 斐波那契数

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

F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

给定 n ,请计算 F(n) 。

示例 1:

输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1

示例 2:

输入:n = 3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2

示例 3:

输入:n = 4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3

分析:

第一步:确定dp数组,选择用一个数组来存放结果。

第二步:递推公式:dp[i]=dp[i-1]+ dp[i-2] ; 递推公式已经给我们了

第三步:dp数组初始化;dp[0]=0,dp[1]=1;

第四步:遍历顺序,看递推公式,dp[i]=dp[i-1] + dp[i-2],肯定是从前往后;

第五步:推导数组;

class Solution {public int fib(int n){//确定特殊的情况if (n == 0){return 0;} if (n == 1){return 1;}//确定数组:dp 数组的长度是n+1int[] dp=new int[n+1];//递推公式dp[i] = dp[i-1] + dp[i-2]//初始化dp ,dp[0]=0,dp[1]=1dp[0]=0;dp[1]=1;//从前往后去遍历数组:第一个index应该是从2开始for (int i=2;i<=n;i++){//i是可以取到 n的dp[i]=dp[i-1]+dp[i-2];}return dp[n]; //返回最后的dp[n]}
}

相关内容

热门资讯

世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
吸猫伐是什么意思 吸猫是吸哪里 作为铲屎官,相信对于网络上流行的各种与猫咪相关的梗都是了然于心的,什么吸猫啦,撸猫啦,云养猫啦……等...
重庆属于哪个省份的 重庆在中国... 重庆有多大,大到超出我们的想象,重庆作为我国4个直辖市之一,印象里应该跟京津沪面积差不多,可事实上却...