参考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 上吗,非常感谢
00
相似问题