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

动态规划-63.不同路径II-力扣(LeetCode)

一、题目解析

 

与62.不同路径不同的一点是现在网格中有了障碍物,其他的并没有什么不同 

二、算法解析

1.状态表示

dp[i][j]表示:到[i,j]位置时,不同的路径数

2.状态转移方程

由于多了障碍物,所以我们要判断是否遇到障碍物

3.初始化

我们要保证初始化后(1)保证后面填表是正确的(2)下标的映射关系

 

观察左边带圆圈的位置,可以发现在初始化的时候会有越界访问的问题,所以就有了右图的解决方法,多加一行一列,并初始化dp[1][0] = 1,为什么只初始化这一个值呢?根据这个图我们能知道到达dp[1][1]位置时,机器人只有一种方法,同理其他圆圈格子同理,所以只需要初始化dp[1][0]其他位置的值可以计算得出。

这里的映射关系为dp[i][j] == obstacleGrid[i-1][j-1],即横纵坐标都-1.

4.填表顺序

为了保证填表时所需值存在,从左往右,从上往下,完成填表

5.返回值

由题需要返回到达右下角的方法数,所以返回dp[m][n]

虽然62没有很大区别,但还是建议自己去上手写一遍,链接:63. 不同路径 II - 力扣(LeetCode) 

三、代码示例

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m = obstacleGrid.size();int n = obstacleGrid[0].size();vector<vector<int>> dp(m+1,vector<int>(n+1));dp[1][0] = 1;for(int i = 1;i<=m;i++){for(int j = 1;j<=n;j++){if(obstacleGrid[i-1][j-1] == 0){dp[i][j] = dp[i-1][j] + dp[i][j-1];}}}return dp[m][n];}
};

 

看到最后,如果对您有所帮助还请点赞、收藏,我们下期再见! 

 

http://www.xdnf.cn/news/6735.html

相关文章:

  • 操作系统知识总结
  • 丝杆升降机最大载荷的工程力学解析与选型实践
  • 懒汉式单例模式的线程安全实现
  • ros2中自定义的package查不到?
  • 事件响应策略规范模版
  • 基于Unity的简单2D游戏开发
  • [特殊字符] 如何优雅地避免 SQL 多表 LEFT JOIN 造成的笛卡尔积放大问题?
  • springboot连接高斯数据库(GaussDB)踩坑指南
  • 杰理ac696配置mic
  • 二水平设计的单次重复
  • 【Shell的基本操作】
  • jvm第一篇《内存与垃圾回收》学习笔记第一章jvm初始
  • 电平匹配电路
  • windows下找出时间大于某时间的附件
  • JavaScript - JavaScript 运算符之圆括号运算符与方括号运算符(圆括号运算符概述、圆括号运算符用法、方括号运算符概述、方括号运算符用法)
  • 最新开源 TEN VAD 与 Turn Detection 让 Voice Agent 对话更拟人 | 社区来稿
  • [ linux-系统 ] 进程优先级 | Linux内核O(1)算法
  • 解决uni-app开发中的“TypeError: Cannot read property ‘0‘ of undefined“问题
  • 51单片机的lcd12864驱动程序
  • 裸金属服务器和云服务器之间的差别
  • ansible进阶06
  • NX二次开发C#---遍历当前工作部件实体并设置颜色
  • SQL练习(6/81)
  • 【Linux】Linux安装并配置MongoDB
  • 游戏引擎学习第285天:“Traversables 的事务性占用”
  • 基于51单片机和8X8点阵屏、矩阵按键的匹对消除类小游戏
  • 服务器性能参数分析基础:磁盘-CPU-内存
  • 关于如何本地启动xxl-job,并且整合SpringBoot
  • 最新模型集合(仅用于个人收集)
  • 前端批量下载文件打包为zip