不同路径2
func uniquePathsWithObstacles(obstacleGrid [][]int) int {
m := len(obstacleGrid)
n := len(obstacleGrid[0])
dp := make([][]int , m)
for i := 0; i < m ; i ++ {
dp[i] = make([]int, n)
}
var recur func (x int , y int ) int
recur = func (x int , y int ) int {
// 结束条件
if obstacleGrid[x][y] == 1 {
return 0
}
if x == 0 && y == 0 {
return 1
}
// 缓存
if dp[x][y] != 0 {
return dp[x][y]
}
// 递推公式
if x - 1 < 0 && y -1 >= 0 {
dp[x][y] = recur(x, y -1 )
}
if x - 1 >= 0 && y -1 < 0 {
dp[x][y] = recur(x - 1, y )
}
if x - 1 >= 0 && y - 1 >=0 {
dp[x][y] = recur(x-1, y) + recur(x, y -1 )
}
return dp[x][y]
}
dp[m-1][n-1] = recur(m-1, n-1)
return dp[m-1][n-1]
}
Last updated
Was this helpful?