代码随想录算法训练营第三十九天| 62.不同路径,63. 不同路径 II

news/2024/11/7 22:33:04/

目录

题目链接:62.不同路径

思路

代码

题目链接:63. 不同路径 II

思路  

代码

总结


题目链接:62.不同路径

思路

        ①dp[i][j]表示从(0,0)到(i,j)有dp[i][j]条路径

        ②递推公式:dp[i][j] = dp[i][j-1] + dp[i-1][j],只可能从两个路径过来,左或者上

        ③dp数组初始化,dp[0][0] = 0,dp[i][0] = 1,dp[0][j] = 1

        ④遍历顺序,从左到右一层一层遍历

        ⑤推到dp数组

代码

class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m, vector<int>(n, 0)); // 定义dp数组// dp数组初始化for (int i = 0; i < m; i++) {dp[i][0] = 1;}for (int j = 0; j < n; j++) {dp[0][j] = 1;}// 从左到右一层一层遍历for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {// 递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}
};

题目链接:63. 不同路径 II

思路  

        ①dp[i][j]表示从(0,0)到(i,j)有dp[i][j]条路径

        ②递推公式:dp[i][j] = dp[i][j-1] + dp[i-1][j],只可能从两个路径过来,左或者上

        ③dp数组初始化,dp[0][0] = 0,dp[i][0] = 1,dp[0][j] = 1

        ④遍历顺序,从左到右一层一层遍历

        ⑤推到dp数组

        处理障碍物:如果遇到障碍物dp数组对应位置保持初始状态0。

代码

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {// 获取行列数int m = obstacleGrid.size();int n = obstacleGrid[0].size();vector<vector<int>> dp(m, vector<int>(n, 0)); // 定义dp数组// dp数组初始化for (int i = 0; i < m; i++) {if (obstacleGrid[i][0] == 1)break; // 障碍物之后无法到达,默认为0dp[i][0] = 1;}for (int j = 0; j < n; j++) {if (obstacleGrid[0][j] == 1)break; // 障碍物之后无法到达,默认为0dp[0][j] = 1;}for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (obstacleGrid[i][j] == 1)continue; // 遇到障碍物时,跳过当前位置的处理dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}
};

总结

        ①路径问题,与台阶问题相似,每次前进都有两种方向,由此推出递推公式

        ②加入障碍物后,在原有代码上添加对障碍物的考虑即可,遇到障碍物跳过

        ③动态规划五部曲很好用


http://www.ppmy.cn/news/1439830.html

相关文章

翻译《The Old New Thing》 - Why .shared sections are a security hole

Why .shared sections are a security hole - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20040804-00/?p38253 Raymond Chen 2004年08月04日 许多人会推荐使用共享数据节作为在应用程序的多个实例之间共享数据的一种方式。这听起来是个好…

开源代码分享(22)-基于拉格朗日松弛的电动汽车分布式充放电调度

1.分布式充放电控制方法 与集中式控制中调度机构直接下达充电指令不同 &#xff0c; 分布式控制中 &#xff0c;调度机构根据系统运行状况发出调度信号 &#xff0c; 用户接收调度信号优化充放电过程 、确定充放电曲线 &#xff0c; 并上报调度中心 。 当电动汽车数量较多时 &…

Java基础入门day40

day40 DQL 分组补充 create table student(sid int,name varchar(20),sex char(6),score double,cid int ); ​ insert into student values(100, wukong, male, 99, 1); insert into student values(101, wuneng, male, 59, 1); insert into student values(102, wujing, ma…

Python编程----递归求解兔子的数量

描述 兔子的数量以这样的方式增长&#xff1a;每个月的兔子数量等于它前一个月的兔子数量加它前两个月的兔子数量&#xff0c;即f(n)f(n-1)f(n-2)。假设第1个月的兔子有2只&#xff0c;第2个月的兔子有3只&#xff0c;你能使用递归的方法求得第n个月的兔子有多少只吗&#xff…

SN75107BDR 总线接收器 中文资料_PDF中文资料_参数_引脚图

SN75107BDR 规格信息&#xff1a; 制造商:Texas Instruments 产品种类:总线接收器 RoHS:是 接收机数量:2 Receiver 接收机信号类型:Differential 电源电压-最小:/- 4.75 V 电源电压-最大:/- 5.25 V 工作电源电流:30 mA 最小工作温度:0 C 最大工作温度: 70 C 封装 / 箱…

【深度学习】烟雾和火焰数据集,野外数据集,超大量数据集,目标检测,YOLOv5

标注了2w张数据集&#xff0c;是目标检测yolo格式的&#xff0c;有火焰、烟雾两个目标&#xff0c;下图是训练时候的样子&#xff1a; 训练方法看这里&#xff1a; https://qq742971636.blog.csdn.net/article/details/138097481 数据集介绍 都是博主辛苦整理和标注的&…

Esp8266 - USB开关分享(开源)

文章目录 简介推广自己gitee项目地址:嘉立创项目地址&#xff1a;联系我们 功能演示视频原理图嘉立创PCB开源地址原理图PCB预览 固件烧录代码编译烧录1. 软件和驱动安装2. 代码编译1. 安装所需要的依赖库文件2. 下载源代码3. 烧录代码 使用说明1. 设备配网2. 打开设备操作页面3…

深入OceanBase内部机制:分区机制构建高可用、高性能的分布式数据库基石

码到三十五 &#xff1a; 个人主页 在数据库技术的发展历程中&#xff0c;随着数据量的不断增长和业务需求的日益复杂&#xff0c;如何高效地存储、查询和处理数据成为了关键挑战。OceanBase作为一款高性能、高可用的分布式关系数据库&#xff0c;通过其独特的分区机制&#xf…