Leetcode 63.不同路径II
Leetcode 63.不同路径II
题目要求
-
给定一个 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 条不同的路径:
- 向右 -> 向右 -> 向下 -> 向下
- 向下 -> 向下 -> 向右 -> 向右
示例 2:

输入:obstacleGrid = [[0,1],[0,0]]
输出:1
动态规划
动规五部曲
-
确定dp数组(dp table)以及下标的含义
dp[i][j]表示到达(i, j)位置的不同路径数量 -
确定递推公式
如果该位置有障碍物,则dp[i][j] = 0
否则dp[i][j] = dp[i - 1][j] + dp[i][j - 1] -
dp数组如何初始化
如果第一行有障碍,那么该障碍右侧的所有位置都无法到达,dp[i][0] = 0
如果第一列有障碍,那么该障碍下方的所有位置都无法到达,dp[0][j] = 0
其余位置dp[i][0] = 1, dp[0][j] = 1 -
确定遍历顺序
从左到右遍历,从上到下遍历
i和j谁在最外层都可以 -
举例推导dp数组
示例1:

1 | class Solution { |
