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

ops/2024/9/20 3:53:11/ 标签: 游戏, 动态规划, 算法

问题描述:

一个机器人位于一个 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.ppmy.cn/ops/40613.html

相关文章

2024.5.8 —— LeetCode 高频题复盘

目录 检测循环依赖7. 整数反转LCR 170. 交易逆序对的总数55. 跳跃游戏45. 二叉树的后序遍历50. Pow(x, n)40. 组合总和 II74. 搜索二维矩阵26. 删除有序数组中的重复项61. 旋转链表 检测循环依赖 题目链接 def haveCircularDependency(self, n: int, prerequisites):g [[]for…

十一、Redis持久化-RDB、AOF

Redis提供了两种持久化数据的方式。一种是RDB快照&#xff0c;另一种是AOF日志。RDB快照是一次全量备份&#xff0c;AOF日志是连续的增量备份。RDB快照是以二进制的方式存放Redis中的数据&#xff0c;在存储上比较紧凑&#xff1b;AOF日志记录的是对内存数据修改的指令文本记录…

Go-Zero自定义goctl实战:定制化模板,加速你的微服务开发效率(四)

前言 上一篇文章带你实现了Go-Zero和goctl&#xff1a;解锁微服务开发的神器&#xff0c;快速上手指南&#xff0c;本文将继续深入探讨Go-Zero的强大之处&#xff0c;并介绍如何使用goctl工具实现模板定制化&#xff0c;并根据实际项目业务需求进行模板定制化实现。 通过本文…

JavaEE开发重中之重 异常 捕获并抛出异常 自定义异常 2024详解

异常就是代表程序可能出现的问题 Error代表系统级别的错误 属于严重问题 Error是给sun公司用的&#xff0c;不是给程序员用的 Exception代表程序可能出现的问题 叫做异常 编译阶段不会出现异常提醒 运行时会出现的异常 编译阶段就会出现的异常 异常体系的最上层父类是E…

redis试题按知识点归类(三)

十一、发布/订阅 1.Redis 的发布/订阅模型是如何工作的&#xff1f; 2.如何使用 Redis 作为消息队列&#xff1f; 3.发布/订阅在实际应用中有哪些用例&#xff1f; 十二、缓存策略 1.如何确定 Redis 的缓存策略&#xff1f; 2.Redis 的缓存替换策略有哪些&#xff1f; 3…

个股期权是什么期权?个股期权什么时候推出?

今天期权懂带你了解个股期权是什么期权&#xff1f;个股期权什么时候推出&#xff1f;期权也称选择权&#xff0c;是指期权的买方有权在约定的期限内&#xff0c;按照事先确定的价格&#xff0c;买入或卖出一定数量某种特定商品或金融指标的权利。 个股期权是什么期权&#xff…

[华为OD] C卷 田忌赛马 DFS 200

题目&#xff1a; 给定两个只包含数字的数组a, b,调整数组a里面数字的顺序&#xff0c;使得尽可能多的a[i] >b[i]。 数组a和b中的数字各不相同。 输出所有可以达到最优结果的a数组的数量 输入描述 输入的第一行是数组a中的数字&#xff0c;其中只包含数字&#xff0c;每…

opencv车道偏离系统-代码+原理-人工智能-自动驾驶

车道偏离预警系统&#xff08;Lane Departure Warning System, LDWS&#xff09;是一种主动安全技术&#xff0c;旨在帮助驾驶员避免因无意中偏离车道而引发的事故。从原理到实战应用&#xff0c;其工作流程大致如下&#xff1a; 传感器采集 &#xff1a;系统通常配备有一个或…

掌握这个Jenkins插件,离测试开发又近一步!

Jenkins Pipeline是一种可编程的、可扩展的持续交付管道&#xff0c;允许您使用脚本来定义整个软件交付过程。 以下是使用Jenkins Pipeline创建和配置流水线的基本步骤。 Part 01. 创建一个Pipeline Job 在Jenkins中创建一个新的"Pipeline"类型的Job。 以下是在J…

网络工程师练习题

网络工程师练习题 POP3服务器默认使用TCP协议的110端口。当客户端收到多个DHCP服务器的响应时,客户端会选择最先到达的地址作为自己的IP地址。ISP分配给某公司的地址块为199.34.76.64/28,则该公司得到的IP地址数是16。下面是路由表的4个表项,与地址220.112.179.92匹配的表项…

计算机网络 3.3OSI参考模型

第三节 OSI参考模型 一、认识OSI/RM 1.描述&#xff1a;定义了一个连接异种计算机的标准主体结构&#xff0c;给网络设计者提供了一个参考规范。 2.组织&#xff1a;国际标准化组织. 3.发展&#xff1a;1979年研究并提出了该国际标准。 4.分层原则&#xff1a; ①层次的划…

Stable Diffusion WebUI 绘画

配置环境介绍​ 目前平台集成了 Stable Diffusion WebUI 的官方镜像&#xff0c;该镜像中整合如下资源&#xff1a; GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本&#xff1a;v1.7.0 Python版本&#xff1a;3.1…

Ubuntu(Linux)Windows 网络连接问题

需求&#xff1a;实现Ubuntu和Windows系统间以太网连接。 Windows端口以太网配置选择IPv4&#xff0c;配置自己的IP&#xff0c;子网掩码不需要填&#xff0c;系统自动补全&#xff0c;默认网关不需要填。 Ubuntu系统为22.04&#xff0c;如果使用网络设置完成IPv4地址设置&…

代码随想录算法训练营第四十六天|139.单词拆分,多重背包,背包问题总结

目录 139.单词拆分思路代码 多重背包思路代码 背包问题总结 139.单词拆分 题目链接&#xff1a;704. 二分查找 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;动态规划之完全背包&#xff0c;你的背包如何装满&#xff1f;| LeetCode&#xff1a;139.单词拆分 思路 dp数…

SQLZOO:Self join

数据表&#xff1a;stops-route stops: id,name route: num,company,pos,stop Q1 How many stops are in the database. SELECT COUNT(id) FROM stops Q2 Find the id value for the stop Craiglockhart SELECT id FROM stops WHERE nameCraiglockhart Q3 Give the i…

【npm】解决npm包突然消失MODULE_NOT_FOUND

今天折腾新特性时需要升级nodejs&#xff0c;安装新版后npm离奇消失了。C:\Users\**用户名\AppData\Roaming\npm\node_modules下只有cnpm&#xff0c;没有npm的目录。重装nodejs也不好使。 机智如我&#xff0c;试了下cnpm -v是正常的&#xff0c;而且能看到nodejs&#xff0c;…

zabbix“专家坐诊”第238期问答

问题一 Q&#xff1a;请问一下 zabbix 如何监控服务器端口的出和入流量?就类似iftop这样的。 A&#xff1a;可以用snmp去监控。 问题二 Q&#xff1a;各位有什么工具能导出zabbix主机列表成execl格式吗&#xff1f; A&#xff1a;进mysql&#xff0c;到hostid&#xff0c;然…

分布式链路追踪:TracingFilter 改造增强设计

在分布式系统中&#xff0c;随着系统规模的扩大和复杂度的增加&#xff0c;排查和解决问题变得愈发困难。分布式链路追踪技术应运而生&#xff0c;它能够帮助开发者跟踪分布式系统中的请求调用链路&#xff0c;定位问题和优化性能。 在本文中&#xff0c;我们将深入探讨如何对…

APP在起步阶段可以对接广告平台,开展商业化广告变现吗?

广告变现已经成了APP开展商业化最快捷的方式之一&#xff0c;吸引了大批开发者进入&#xff0c;期望把流量转化成收益。 APP在起步阶段适合对接广告平台开展广告变现吗&#xff1f;AdSet结合丰富的变现经验&#xff0c;为开发者提供实用的商业化发展计划。 APP起步阶段的体量…

二进制转为HEX数组小工具

在使用RA8889时&#xff0c;JPG的解码只能从FLASH的DMA通道获取&#xff0c;那么如果要从远端、或者SD卡等处读取JPG图片出来显示怎么办&#xff1f; RA8889支持JPG图片硬解码&#xff0c;但数据流是从FLASH进行DMA读取的&#xff0c;然后再进行解码。因此这种情况下&#xff…