大家好,欢迎来到我们今天的LeetCode探秘之旅。在编程的世界里,路途虽艰,但我们总能找到通往目的地的道路。今天,我们要探讨的是LeetCode第63题《不同路径 II》。与第62题不同,这次我们不仅要走出迷宫,还要避开迷宫中的障碍物。就像是在玩一场高难度的跳房子游戏,障碍物就是那些“不可跳过”的格子。
文章目录
题目描述
给定一个包含障碍物和空格的网格,找出从左上角到右下角的所有不同路径的数量。网格中的障碍物和空格分别用1和0来表示。
例如:
输入:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
输出: 2
解题思路
DP解法:动态规划——跳房子策略
我们还是用动态规划的方法,但这次我们要考虑障碍物的存在。障碍物所在的格子是无法通过的,因此我们要跳过这些格子。
状态定义
定义一个二维数组dp
,其中dp[i][j]
表示到达位置(i, j)的不同路径数。对于起点dp[0][0]
,如果起点本身是障碍物,那么路径数为0,否则为1。
递推公式
- 如果当前格子是障碍物
grid[i][j] == 1
,那么dp[i][j] = 0
。 - 如果当前格子不是障碍物,那么路径数为从上方格子到达的路径数和从左侧格子到达的路径数之和。
公式如下: