参考leetcode提供的解法,实现的能通过测试的方法

来源:14-2 不同路径II-代码实操

Nick_arron

2019-09-11

function getPaths (obstacleGrid) {
  let m = obstacleGrid.length
  let n = obstacleGrid[0].length

  // 极端条件
  if (obstacleGrid[0][0] === 1 || obstacleGrid[m - 1][n - 1] === 1) {
    return 0
  }

  obstacleGrid[0][0] = 1

  // 将第一行遍历,设置为0代表不能通过,设置为1代表可以通过
  for (let i = 1; i < n; i++) {
    // 当前格为0且前一个格为1,代表可以通过;当前格为1 || 前一个格为0,代表不能通过
    obstacleGrid[0][i] = obstacleGrid[0][i] === 0 && obstacleGrid[0][i - 1] === 1 ? 1 : 0
  }

  // 同理遍历第一列
  for (let j = 1; j < m; j++) {
    obstacleGrid[j][0] = obstacleGrid[j][0] === 0 && obstacleGrid[j - 1][0] === 1 ? 1 : 0
  }

  // 从上向下,从左往右遍历,f(m,n) = f(m-1,n) + f(m,n-1)
  for (let i = 1; i < m; i++) {
    for (let j = 1; j < n; j++) {
      obstacleGrid[i][j] = obstacleGrid[i][j] !== 1 ? obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1] : 0
    }
  }

  return obstacleGrid[m - 1][n - 1]
}
写回答

1回答

快乐动起来呀

2019-09-11

很赞,可以贡献到我们的 git 上吗,非常感谢

0
0

JavaScript版 数据结构与算法

填补前端同学的算法短板,掌握面试中最常见的算法与数据结构

2467 学习 · 395 问题

查看课程