LC63. 不同路径 II
解题思路
与LC62大致相似,多了一个路障,遇到路障时候跳过,若上i - 1或者j - 1是路障则不添加路线
首先dp[i][j]肯定是能到这个位置的所有路径
递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
初始化:dp[i][j] = 0
遍历顺序:顺序遍历
代码
Python
1 | class Solution: |
C++
1 | class Solution { |
Go
func uniquePathsWithObstacles(obstacleGrid [][]int) int {
m, n := len(obstacleGrid), len(obstacleGrid[0])
dp := make([][]int, m)
for i := range dp {
dp[i] = make([]int, n)
}
if obstacleGrid[0][0] == 1 {return 0}
dp[0][0] = 1
for i := 0; i < m; i++ {
for j := 0; j < n; j++ {
if obstacleGrid[i][j] == 1 {continue}
if i - 1 >= 0 && obstacleGrid[i - 1][j] != 1 {
dp[i][j] += dp[i - 1][j]
}
if j - 1 >= 0 && obstacleGrid[i][j - 1] != 1 {
dp[i][j] += dp[i][j - 1]
}
}
}
return dp[m - 1][n - 1]
}
评论
