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

动态规划-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.dtcms.com/a/193955.html

相关文章:

  • 一发入魂:极简解决 SwiftUI 复杂视图未能正确刷新的问题(中)
  • 大模型技术发展全景报告:架构演进、应用落地与未来挑战
  • 专业版降重指南:如何用Python批量替换同义词?自动化操作不香嘛?
  • AG-UI 协议:重构多模态交互,开启智能应用新纪元
  • 游戏AI研究所-Stable Diffusion中LoRA(Low-Rank Adaptation)的定义及权重的作用机制
  • 【流程控制结构】
  • ReinboT:通过强化学习增强机器人视觉-语言操控能力
  • Mac上安装运行SynthTIGER
  • C++跨平台开发:突破不同平台的技术密码
  • uniapp-商城-60-后台 新增商品(属性的选中和页面显示)
  • 架构选择、区别
  • 学习51单片机02
  • 麒麟服务器操作系统安装 MySQL 8 实战指南
  • 掌握 Kotlin Android 单元测试:MockK 框架深度实践指南
  • 【AI】用Dify实现一个模拟面试的功能
  • require/exports 或 import/export的联系和区别,各自的使用场景
  • skywalking使用教程
  • 基于51单片机和8X8点阵屏、矩阵按键的匹对消除类小游戏
  • Flask 是否使用类似 Spring Boot 的核心注解机制
  • MyBatis—动态 SQL
  • Mysql存储过程(附案例)
  • Gitee DevOps:中国企业数字化转型的加速引擎
  • Gitee DevOps:中国企业数字化转型的“本土化加速器“
  • 【Pandas】pandas DataFrame kurt
  • 深度剖析:Dify+Sanic+Vue+ECharts 搭建 Text2SQL 项目 sanic-web 的 Debug 实战
  • 【Unity】用事件广播的方式实现游戏暂停,简单且实用!
  • 单元化架构
  • <PLC><视觉><机器人>基于海康威视视觉检测和UR机械臂,如何实现N点标定?
  • IEEE 列表会议第五届机器人、自动化与智能控制国际会议
  • 软件架构风格系列(4):事件驱动架构