回到技术博客

63. 不同路径 II🔖DP

动态规划

62. 不同路径🔖DP题目的延申。

这个题目的难点不是在状态转移方程的建立,而是初始状态的建立。

数据预处理说明,对障碍物或是走不通的格子都设置为0

  1. 状态转移方程

不变。和62. 不同路径🔖DP中的方程一样:f[i][j] = f[i-1][j] + f[i][j-1]

  1. 初始状态

  2. 上边界和左边界:不能单纯的全部设为1,如果有障碍物,那么后续的路(往右/往下)走不通

  3. 正式区域(非上/左边界):遇到障碍物那么就是走不通,即0

  4. 比较特殊的初始状态:

  5. 起点即终点

  6. 起点为障碍物

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]
};
— 写于生活,留给未来 —

最后更新于 2024-11-17

树下留言

LET’S TALK

文字是一次相遇。很高兴听到你的声音。

评论加载中…