当前位置: 首页 > news >正文

代码随想录算法训练营第三十八天|理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

题目:理论基础

文章链接:代码随想录

 视频链接:动态规划理论基础

动态规划五部曲:

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

 题目:509. 斐波那契数

文章链接:代码随想录

视频链接:LeetCode:509.斐波那契数

题目链接:力扣题目链接

图释:

class Solution {
public:// 确定dp数组(dp table)以及下标的含义 vector<int> dp, dp[i]表示第n哥斐波那契数 // 确定递推公式      dp[i]=dp[i-1]+dp[i-2]// dp数组如何初始化  dp[0]=1, dp[1]=1// 确定遍历顺序      从前往后// 举例推导dp数组    int fib(int n) {if(n<=0)return 0;if(n==1) return 1;vector<int> dp(n+1);dp[0]=0;dp[1]=1;for(int i=2; i<=n; i++){//从2开始,直到第n个数dp[i]= dp[i-1]+dp[i-2];}return dp[n];}
};
class Solution {
public:int traversal(int n){// 终止条件if(n==1) return 1;if(n==0) return 0;// 递归return traversal(n-1)+traversal(n-2);}  int fib(int n) {  return traversal(n);}
};再精简
class Solution {
public:int fib(int n) {  // 终止条件if(n==1) return 1;if(n==0) return 0;return fib(n-1)+fib(n-2);}
};

题目:70. 爬楼梯

文章链接:代码随想录

视频链接:LeetCode:70.爬楼梯

题目链接:力扣题目链接

图释:

class Solution {
public:// 确定dp数组(dp table)以及下标的含义 vector<int> dp, dp[i]表示达到第n层楼梯需要的方法 // 确定递推公式      dp[i]=dp[i-1]+dp[i-2]// dp数组如何初始化  dp[1]=1, dp[2]=2// 确定遍历顺序      从前往后// 举例推导dp数组  // 题目中要求的每次可以爬1或者2个台阶,也就是说,最终到达n阶台阶有两种方式,// 一个是爬1阶台阶到达(对应的是从n-1阶台阶开始)// 另一个就是爬2阶台阶到达(对应的是从n-2阶台阶开始爬),// 而爬n-1阶和n-2阶台阶的方法有dp[n-1],dp[n-2]个// 所以最终爬n阶台阶的方法种类就是dp[n-1]+dp[n-2]int climbStairs(int n) {if(n==1) return 1;if(n==2) return 2;vector<int> dp(n+1);dp[1]=1;dp[2]=2;for(int i=3; i<=n; i++){dp[i] = dp[i-1]+dp[i-2];}return dp[n];}
};
class Solution {
public:int climbStairs(int n) {if(n==1) return 1;if(n==2) return 2;return climbStairs(n-1)+climbStairs(n-2);}
};  //超时

题目:746. 使用最小花费爬楼梯

文章链接:代码随想录

视频链接:LeetCode:746.使用最小花费爬楼梯

题目链接:力扣题目链接

图释:

class Solution {
public:// 确定dp数组(dp table)以及下标的含义 vector<int> dp, dp[i]表示爬到第n层台阶的最低花费// 确定递推公式      dp[i]= min(dp[i-1]+cost[i-1], dp[i-2]+cost[i+2]) 可以选择从前一个台阶或者前两个台阶爬上来 // dp数组如何初始化  dp[0]=0, dp[1]=0  题目说了,可以选择从0或者1台阶出发,也就是dp[i]到这两个台阶的最低花费为0// 确定遍历顺序      从前往后// 举例推导dp数组 int minCostClimbingStairs(vector<int>& cost) {if(cost.size()==0 || cost.size()==1) return 0;vector<int> dp(cost.size()+1);dp[0]=dp[1]=0;for(int i=2; i<=cost.size(); i++){  // 顶楼表示为dp[n] dp[i]= min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);}return dp[cost.size()];}
};

http://www.lryc.cn/news/283813.html

相关文章:

  • 大数据开发之Hadoop(优化新特征)
  • 在使用go语言开发的时候,程序启动后如何获取程序pid
  • HFSS笔记/信号完整性分析(二)——软件仿真设置大全
  • mysql主从报错:Last_IO_Error: Error connecting to source解决方法
  • AOI与AVI:在视觉检测中的不同点和相似点
  • Python爬虫 - 网易云音乐下载
  • yarn包管理器在添加、更新、删除模块时,在项目中是如何体现的
  • React实现Intro效果(基础简单)
  • HBuilderx发布苹果的包需要注意什么
  • 烟火检测/周界入侵/视频智能识别AI智能分析网关V4如何配置ONVIF摄像机接入
  • C++ 内联函数
  • 微信小程序带参数分享界面、打开界面加载分享内容
  • 中小企业选择CRM系统有哪些注意事项?如何高效实施CRM
  • 轮胎侧偏刚度线性插值方法
  • 前端JS代码中Object类型数据的相关知识
  • vue基于Spring Boot共享单车租赁报修信息系统
  • CentOS 6.10 安装图解
  • Web自动化测试中的接口测试
  • 轻松识别Midjourney等AI生成图片,开源GenImage
  • ARP相关
  • uniapp打包配置 (安卓+ios)
  • 【算法优选】 动态规划之简单多状态dp问题——壹
  • Git学习笔记(第2章):Git安装
  • C生万物呀
  • 华纳云:怎么解决docker容器一直处于重启状态的问题?
  • react native android使用命令生成打包签名密钥
  • 245.【2023年华为OD机试真题(C卷)】内存冷热标记(JavaPythonC++JS实现)
  • Docker五部曲之五:通过Docker和GitHub Action搭建个人CICD项目
  • 「JavaSE」类和对象3
  • IntelliJ IDEA 中输出乱码解决