动态规划
62. 不同路径🔖DP题目的延申。
这个题目的难点不是在状态转移方程的建立,而是初始状态的建立。
数据预处理说明,对障碍物或是走不通的格子都设置为0
- 状态转移方程
不变。和62. 不同路径🔖DP中的方程一样:f[i][j] = f[i-1][j] + f[i][j-1]
- 初始状态
- 上边界和左边界:不能单纯的全部设为1,如果有障碍物,那么后续的路(往右/往下)走不通
- 正式区域(非上/左边界):遇到障碍物那么就是走不通,即0
- 比较特殊的初始状态:
- 起点即终点
- 起点为障碍物
function uniquePathsWithObstacles(obstacleGrid: number[][]): number {
if (obstacleGrid[0][0]) return 0
const m = obstacleGrid.length
const n = obstacleGrid[0].length
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
const curr = obstacleGrid[i][j]
if (!i || !j) {
if (!i && !j) {
obstacleGrid[i][j] = m === 1 && n === 1 ? 1 : 0
} else if (curr || (j > 1 && obstacleGrid[0][j - 1] === 0) || (i > 1 && obstacleGrid[i - 1][0] === 0)) {
obstacleGrid[i][j] = 0
} else {
obstacleGrid[i][j] = 1
}
} else if (curr) {
obstacleGrid[i][j] = 0
} else {
obstacleGrid[i][j] = obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1]
}
}
}
return obstacleGrid[m - 1][n - 1]
};
评论区