leetcode动态规划(六)-不同路径(有障碍物)

ops/2024/10/19 11:42:27/

题目

63.不同路径(有障碍物)

给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。

网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的移动路径中不能包含 任何 有障碍物的方格。

返回机器人能够到达右下角的不同路径数量。

测试用例保证答案小于等于 2 * 109

示例 1:

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

示例 2:

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

提示:

  • m == obstacleGrid.length
  • n == obstacleGrid[i].length
  • 1 <= m, n <= 100
  • obstacleGrid[i][j] 为 0 或 1

思路

1.确定dp数组(dp table)以及下标的含义

dp[i][j]表示从坐标[0][0]到坐标[i][j]一共有多少种路径

2.确定递推公式

和无障碍物路径一样,dp[i][j]依赖dp[i-1][j]和dp[i][j-1]

3.dp数组如何初始化

题目已经给了障碍物的情况,在初始化第一行和第一列的时候,需要注意在有障碍物的后面的位置均是无路径的,都需要设置为0,而当obstacleGrid[i][j]中显示为0的时候,就是这里可以通过,那就赋值为1即可

4.确定遍历顺序

由递推公式可知,是需要从前往后来进行遍历的

5.举例推导dp数组

代码

class Solution:def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:if obstacleGrid[0][0]==1 or obstacleGrid[-1][-1]==1:return 0m = len(obstacleGrid)n = len(obstacleGrid[0])dp = [[0]*n for _ in range(m)]for i in range(m):if obstacleGrid[i][0]==0:dp[i][0] = 1if obstacleGrid[i][0]==1:breakfor j in range(n):if obstacleGrid[0][j] == 0:dp[0][j] = 1if obstacleGrid[0][j] == 1:breakfor i in range(1,m):for j in range(1,n):if obstacleGrid[i][j] == 1:dp[i][j] = 0else:dp[i][j] = dp[i-1][j]+dp[i][j-1]return dp[-1][-1]

 


http://www.ppmy.cn/ops/126712.html

相关文章

32.数据结构与算法-树表的查找-平衡二叉树的分析与调整

平衡二叉树的定义 失衡二叉排序树的分析与调整 平衡调整的四种类型 LL型调整 RR型调整 LR型调整 RL型调整 例题

v-model双向绑定组件通信

给input元素绑定原生input事件&#xff0c;触发input事件时&#xff0c;进而触发update:model-value事件 <template> <Child v-model"lastName" v-if"true"></Child> <p >{{lastName}}</p> </template> <script&g…

STM32_实验3_控制RGB灯

HAL_Delay 是 STM32 HAL 库中的一个函数&#xff0c;用于在程序中产生一个指定时间的延迟。这个函数是基于系统滴答定时器&#xff08;SysTick&#xff09;来实现的&#xff0c;因此可以实现毫秒级的延迟。 void HAL_Delay(uint32_t Delay); 配置引脚&#xff1a; 点击 1 到 IO…

rootless模式下istio ambient鉴权策略

环境说明 rootless模式下测试istio Ambient功能 四层鉴权策略 这里四层指的是网络通信模型的第四层&#xff0c;主要的传输协议为TCP和UDP。 用于限制服务间的通信&#xff0c;比如下面的策略应用于带有 app: productpage 标签的 Pod&#xff0c; 并且仅允许来自服务帐户 clus…

【MySQL】MySQL的简单了解详解SQL分类数据库的操纵方法

一、mysql定义 mysql是数据库服务的客户端&#xff0c;mysqld是数据库服务的服务器端。mysql的本质就是基于CS模式下的一种网络服务。数据库一般指的是在磁盘中或内存中存储的特定结构组织的数据&#xff0c;将来就是在磁盘上存储的一套数据库方案。 创建数据库&#xff0c;本质…

Rust编写硬件抽象层(HAL)服务

基于Rust编写硬件抽象层&#xff08;HAL&#xff09;服务是一个复杂但有趣的任务&#xff0c;它涉及到嵌入式系统开发的多个方面。以下是一个详细的指南&#xff0c;帮助你理解如何使用Rust编写HAL服务。 一、引言 硬件抽象层&#xff08;HAL&#xff09;是嵌入式系统开发中的…

校车购票微信小程序的设计与实现(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…

Redis Search系列 - 第一讲 创建索引

目录 一、引言二、全文检索基本概念三、创建索引 一、引言 Redis Search 是 Redis 的一个模块&#xff0c;用于提供全文搜索和二级索引功能。它允许在 Redis 数据库中执行复杂的搜索查询&#xff0c;并支持多种数据类型和查询操作。以下是 Redis Search 的一些关键特性&#x…