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

代码随想录算法训练营第三十九天【动态规划part02】 | 62.不同路径、63. 不同路径 II

62.不同路径

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

动规五部曲

  1. 确定dp数组及其下标含义:dp[i][j] 表示从(0,0)出发,到(i,j)有dp[i][j] 条路径
  2. 确定递推公式:只能从左边或上边过来,因此 dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
  3. dp数组的初始化:第一行和第一列都初始化为1,因为从原点到[i][0]或[0][j]的路径只有一条
  4. 确定遍历顺序:因为当前值从上方和左方推导而来,因此从左到右,从上到下遍历
  5. 举例推导dp数组:如图所示

代码:

class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m, vector<int>(n,0));// 将第一行和第一列初始化为1,因为只有一种路径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

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

动规五部曲

  1. 确定dp数组及其下标含义:dp[i][j] 表示从(0,0)出发,到(i,j)有dp[i][j] 条路径
  2. 确定递推公式:只能从左边或上边过来, dp[i][j] = dp[i - 1][j] + dp[i][j - 1],注意如果有障碍物就跳过当前循环
  3. dp数组的初始化:第一行和第一列都初始化为1,因为从原点到[i][0]或[0][j]的路径只有一条;注意如果在第一行或第一列的某个位置有障碍物,则再往右或往下的道路就不通了,初始化应该停止
  4. 确定遍历顺序:因为当前值从上方和左方推导而来,因此从左到右,从上到下遍历
  5. 举例推导dp数组:如图所示,中间的位置是障碍物

代码:

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));for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[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.lryc.cn/news/236059.html

相关文章:

  • 鸿蒙4.0开发笔记之DevEco Studio如何使用Previewer窗口预览器(一)
  • 音视频转换软件Permute mac中文板特点介绍
  • 前端uniapp列表下拉到底部加载下一页列表【下拉加载页面/带源码/实战】
  • 超聚变服务器关闭超线程CPU的步骤(完整版)
  • 智能驾驶汽车虚拟仿真视频数据理解(一)
  • 事关Django的静态资源目录设置(Django的setting.py中的三句静态资源(static)目录设置语句分别是什么作用?)
  • Vue.js2+Cesium1.103.0 十四、绘制视锥,并可实时调整视锥姿态
  • 批量替换WordPress文章内图片链接
  • 关于DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC的一些发现
  • MatrixOne 支持多样化生态工具
  • 力扣刷题篇之位运算
  • asp.net core mvc 控制器使用配置
  • Hadoop学习总结(MapRdeuce的词频统计)
  • PPT基础入门
  • Java 语言关键字有哪些
  • Go vs Rust:文件上传性能比较
  • C# NAudio 音频库
  • springcloudalibaba-3
  • 异步复位同步释放与同步复位打拍
  • 使用Python进行二维图像的三维重建
  • go-zero微服务的使用
  • Java排序算法之基数排序
  • Ubuntu20.0中安装Gradle
  • 【Java并发编程六】多线程越界问题
  • 聊聊httpclient的disableConnectionState
  • Tomcat web.xml文件中的mime-mapping
  • 【Java 进阶篇】JQuery 事件绑定:`on` 与 `off` 的奇妙舞曲
  • 模块化Common JS 和 ES Module
  • 基于java web个人财务管理系统
  • soc估计:DESIGN AND DEVELOPMENT OF SoC ESTIMATION MODEL USING MACHINE LEARNING