现在考虑是否在网格中添加了一些障碍。有多少独特的路径?
障碍物和空白空间在网格中分别标记为 1 和 0。
例如,
如下图所示,3x3 网格中间有一个障碍物。
[
[0,0,0]
[0,1,0]
[0,0,0]
]
唯一路径的总数是 2。
注意: m 和 n 最多为 100。
解题思路:
- 这道题是 unique-paths 的变体
- 具体的解题思路相同,只是在碰到障碍时,将当前位置的值设为 1 即可
代码如下:
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
if(m == 0 || obstacleGrid[0][0] == 1) return 0;
int n = obstacleGrid[0].length;
int [][] lujin = new int[m][n];
lujin[0][0] = 1;
for(int i = 1; i < n; i++){
if(obstacleGrid[0][i] == 1)
lujin[0][i] = 0;
else
lujin[0][i] = lujin[0][ i - 1];
}
for(int i = 1; i < m; i++){
if(obstacleGrid[i][0] == 1)
lujin[i][0] = 0;
else
lujin[i][0] = lujin[i - 1][0];
}
for(int i = 1; i < m; i++){
for(int j = 1; j < n; j++){
if(obstacleGrid[i][j] == 1)
lujin[i][j] = 0;
else{
lujin[i][j] = lujin[i][j - 1] + lujin[i - 1][j];
}
}
}
return lujin[m - 1][n -1];
}