一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。web
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。数组
如今考虑网格中有障碍物。那么从左上角到右下角将会有多少条不一样的路径?svg
func uniquePathsWithObstacles(obstacleGrid [][]int) int { if len(obstacleGrid) == 0 || len(obstacleGrid[0]) == 0 || obstacleGrid[0][0] == 1 { return 0 } n := len(obstacleGrid) m := len(obstacleGrid[0]) flag := 0 // 初始化边 obstacleGrid[0][0] = 1 for i := 1; i < m; i++ { if flag == 0 && obstacleGrid[0][i] == 0 { obstacleGrid[0][i] = 1 } else { obstacleGrid[0][i] = 0 flag = 1 } } flag = 0 for i := 1; i < n; i++ { if flag == 0 && obstacleGrid[i][0] == 0 { obstacleGrid[i][0] = 1 } else { obstacleGrid[i][0] = 0 flag = 1 } } for i := 1; i < n; i++ { for j := 1; j < m; j++ { if obstacleGrid[i][j] == 1 { obstacleGrid[i][j] = 0 } else { obstacleGrid[i][j] = obstacleGrid[i-1][j] + obstacleGrid[i][j-1] } } } return obstacleGrid[n-1][m-1] }
这道题有一道前置题目,62.不一样路径,区别在于没有障碍物,直接从(0,0)走到(n,m),有几种走法。先来看没有障碍的状况下,这个题要怎么考虑。ui
当路径中存在障碍的时候,相比于上面的思路,只须要增长两点spa