代码随想录:动态规划的问题
创始人
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]}
}

相关内容

热门资讯

阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
荼蘼什么意思 岁月缱绻葳蕤生香... 感谢作者【辰夕】的原创独家授权分享编辑整理:【多肉植物百科】百科君坐标:云南 曲靖春而至,季节流转,...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...