leetcode63.跳跃游戏2(动态规划)

问题描述:

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 1 和 0 来表示。

示例一:

输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
输出:2
解释:3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右

 对应的图片:

示例二:

输入:obstacleGrid = [[0,1],[0,0]]
输出:1

对应的图片:

问题解决:

这道题与跳跃游戏那道题基本一样,只是多了障碍物。

1.状态表示

因为本题是二维表格的最短路径,所以dp数组也要是二维的:

dp[i][j]表示走到 [i,j] 的时候一共有多少种不同的路径

2.状态转移方程

要想求到达dp[i][j]一共有多少条路径,题干规定机器人每次只能向下或者向右移动一步,首先得判

断对应的节点是不是有障碍,如果有,直接返回0,没有就必须知道到达dp[i - 1][j]有多少条路径,

还有到达dp[i][j - 1]有多少条路径,这两条路径不是二选一,而是全都满足条件,所以应该全部加到

dp[i][j]中。

对应dp[i][j]的状态转移方程:

dp[i][j] = dp[i - 1][j] + dp[i][j - 1]

3.初识化一些值:

这道题要直接进行初始化,初始化的值很多,需要将第一行和第一列的之全部初始化,不然就会有

位置找不到有多少条路径,这是就要与上次解码方法类似添加一行一列辅助节点,同样是两个问

题:

1.如何填写虚拟节点里面的值,使之后的填表顺序进行?

其实在添加了一行一列辅助虚拟节点之后,最需要虚拟节点的是原来的第一行和第一列的dp数组表

那么元dp数组的左上角应该填的是什么,从起点出发到达起点只有一种方法,所以应该填写1,但

是要通过这些虚拟头节点来实现左上角的值为1,而且也满足其他要初始化的节点,所以可以在添

加了虚拟数组之后,在第一行第二列将其赋值为1,也可以将第二行第一列的节点赋值为1,

这样就只用初始化一个节点了。

2.关于添加了虚拟节点的数组和dp数组的映射关系

因为这道题传的是二维数组,所以在访问其元素时一定要记得将dp对应的位置的下标 - 1 之后在进

行访问,这才是我们想要访问的所传的数组中的元素。

4.填表顺序

每一行从上到下

行里每一列从左到右

5.返回值

dp[m][n],应为添加了虚拟节点,数组也变大了,所以要求的结果是对应dp[m][n],其中m是行数

n是列数。

对应代码:

class Solution 
{
public:int uniquePathsWithObstacles(vector<vector<int>>& ob) {//1.创建dp表//2.初始化//3.填表//4.返回值int m = ob.size(), n = ob[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(ob[i - 1][j - 1] == 0){dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}}return dp[m][n];}
};

这就是这道题的解法,只需增加判断有没有障碍即可。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3+vite+axios+ElementPlus+ElLoading简易封装

1.安装按需加载element-plus需要的依赖包 pnpm install element-pluspnpm install axios# 按需自动导入 pnpm install -D unplugin-vue-components unplugin-auto-import# 自动导入element-plus样式 pnpm install -D vite-plugin-style-import2.修改jsconfig.json {"com…

基于scarpy框架的肯德基中国门店信息获取

基于scarpy框架的肯德基中国门店信息获取 一.项目流程二.对爬虫文件进行编写三.对管道进行编写 一.项目流程 scrapy基础知识: https://blog.csdn.net/qq_44907926/article/details/119531324 1.创建scrapy项目:scrapy startproject <项目名> 2.在项目中生成一个爬虫: sc…

某票星球网图标点选验证码YOLOV8识别案例

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 图标点选验证码大家都不陌生了,我们来看下数据集 引言与个人想法 先说结论,本文采用的方法能够达到99的准确率,效果图如下 做图标点选其实方法有很多,有的…

使用网络工具监控网络性能

网络工具和实用程序有助于有效地检测网络问题&#xff0c;诊断其原因和位置&#xff0c;以及缓解和解决问题&#xff0c;这有助于确保网络环境的稳定性&#xff0c;使用户免受设备连接问题带来的麻烦。 网络工具已经成为每个网络管理员用于有效诊断和处理网络问题的解决方案中…

暴露自己IP地址有什么危险

暴露自己的IP地址确实存在一定的危险性&#xff0c;以下是关于这一问题的详细探讨&#xff1a; 一、IP地址的重要性 IP地址是互联网通信中的关键标识&#xff0c;它使得网络中的设备能够相互识别并进行数据传输。在网络世界中&#xff0c;每台设备都需要一个独特的IP地址来确…

斯坦福大学的在线密码学课程

密码学是保护计算机系统信息不可或缺的工具。在本课程中&#xff0c;您将了解密码系统的内部工作原理&#xff0c;以及如何在实际应用中正确使用它们。课程首先将详细讨论当强大的对手窃听和篡改流量时&#xff0c;拥有共享密钥的双方如何进行安全通信。我们将研究许多已部署的…

SAP sq01,sq02,sq03创建query报表

步骤&#xff1a;1&#xff0c;SQ03创建用户组&#xff08;User Group&#xff09; 2&#xff0c;SQ02创建信息集&#xff08;InfoSet&#xff09; 3&#xff0c;SQ03分配用户和InfoSet 4&#xff0c;SQ01创建查询 5&#xff0c;SE93给Query分配Tcode 1&#xff0c;SQ03创建用…

ifconfig命令找不到 command not found

问题 今天解决虚拟机的网络问题后&#xff0c;使用ifconfig发现报错命令未找到 解决方案 输入yum install ifconfi的程序安装包 yum install ifconfig 如果显示没有可用软件包 ifconfig&#xff0c;错误&#xff1a;。 就输入yum search ifconfig匹配安装包程序 yum searc…

2024好用的4款3D雕刻软件,快来拿走

3D 雕刻是一种让角色、怪物或任何有机形状栩栩如生的方法。您可以将其视为由粘土制成的真实模型&#xff0c;并可以根据您的意愿推、拉、平滑、抓住或捏它以创建其最终形状。3d 雕刻有哪些软件好用&#xff1f;3d 雕刻软件对电脑要求高吗&#xff1f;电脑带不动3d软件怎么办&am…

【隧道篇 / WAN优化】(7.4) ❀ 03. WAN优化的原理 ❀ FortiGate 防火墙

【简介】相信对WAN优化感兴趣的人都会有疑问&#xff0c;WAN优化真的有作用吗&#xff1f;如果真的有作用&#xff0c;那是根据什么原理呢&#xff1f;让我们来更深入的了解一下。 客户端和服务器端 其实很多人在一开始看到WAN优化这个词&#xff0c;就自然的以为上网速度太慢&…

How Linux Works I - How Linux Start Up

目录 Linux如何启动&#xff1f; 启动信息 内核启动初始化与启动选项 写在前面&#xff1a;上一个专栏中我写完了内核源码层面看Linux&#xff0c;我们把抽象层拉高一点&#xff0c;看看Linux是如何工作的&#xff01; Linux如何启动&#xff1f; BIOS&#xff08;Basic Inpu…

linux基础命令第二篇

雷迪斯and the乡亲们 欢迎你们来到 奇幻的编程世界 8.history命令 作用&#xff1a;查看和控制历史命令纪录 保存位置&#xff1a;&#xff1a;~/.bash_history &#xff08;1&#xff09;在启动终端的时候&#xff0c;会自动从&#xff1a;~/.bash_history 中读取历史命令…

【优选算法】——双指针——15. 三数之和

目录 1.题目 2.解法&#xff08;排序双指针&#xff09;&#xff1a; 算法思路&#xff1a; 3.代码实现 1.题目 15. 三数之和 提示 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足…

RT-Thread移植到STM32F407

1、获取RT-Thread源码 首先到rtthread官网下载rt-thread nano后解压 解压后打开后内容如下。 2、系统结构 各文件夹的作用如下&#xff1a; Rt-Thread-nano源码结构 文件夹描述bsp板级支持包components/finshRT-Thread组件docs文档信息include头文件libcpu/arm与arm处理器相…

根文件系统的其他测试

文章目录 一、hello测试程序编写二、程序后台运行1.在后台运行方法2.中文显示测试3.开机自动启动测试 一、hello测试程序编写 &#x1f4a6;我们使用 Linux 的目的就是运行我们自己的软件&#xff0c;我们编译的应用软件一般都使用动态库&#xff0c;使用动态库的话应用软件体…

获取两个时间之间的月份

工具类 public static List<String> getMonthBetweenDate(Date startDate, Date endDate) {ArrayList<String> result new ArrayList<String>();SimpleDateFormat sdf new SimpleDateFormat("yyyy.MM");//格式化&#xff0c;调整为自己需要的格…

摩菲Murphy显示器显示表 总线编程器维修PV780B

Murphy仪器维修包括&#xff1a;摩菲数字显示器&#xff1b;摩菲监视仪表&#xff1b;摩菲CAN总线控制器等维修 维修故障包括&#xff1a;黑屏、指示灯无显示&#xff0c;触摸屏上电无反应&#xff0c; 上电蓝屏、白屏&#xff0c;通电几分钟后屏幕变为蓝屏&#xff0c;主板故…

班级综合测评|基于Springboot+vue的班级综合测评管理系统(源码+数据库+文档)

目录 基于Springbootvue的“智慧食堂”系统 一、前言 二、系统设计 三、系统功能设计 1 管理员功能模块 2学生功能模块 3教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大…

应用系统集成企业微信的技术方案和最佳实践

本文以springbootvue技术开发的低代码平台为案例&#xff0c;介绍应用系统如何集成企业微信&#xff0c;包括同步企业微信组织用户、单点登录、消息发送等。 在线体验&#xff1a;http://www.yunchengxc.com 1、准备应用 1.1、注册企业微信账号 作为企业微信的企业管理员&a…

铅离子/镉离子绿色荧光探针,具有高特异性高灵敏度

基本信息&#xff1a; 中文名称&#xff1a;铅离子/镉离子绿色荧光探针 英文名称&#xff1a;Leadmium TM Green AM dye 外观&#xff1a;固体或粉末状 规格&#xff1a;10mg、25mg、50mg (可支持定制&#xff09; 纯度&#xff1a;95% 储存条件&#xff1a;-20C避光避湿…