题目链接:unique-paths-ii
/**
*
Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1 and 0 respectively in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
[
[0,0,0],
[0,1,0],
[0,0,0]
]
The total number of unique paths is 2.
Note: m and n will be at most 100.
*
*/
public class UniquePathsII {
// 43 / 43 test cases passed.
// Status: Accepted
// Runtime: 196 ms
// Submitted: 0 minutes ago
static int uniquePathsII(int[][] obstacleGrid) {
int n = obstacleGrid[0].length;
int m = obstacleGrid.length;
int[][] paths = new int[m][n];
paths[m - 1][n - 1] = (obstacleGrid[m - 1][n -1] == 0) ? 1 : 0;
for (int i = n - 2; i >= 0; i--) {
if(obstacleGrid[m - 1][i] == 1) paths[m - 1][i] = 0;
else paths[m - 1][i] = paths[m - 1][i + 1];
}
for (int i = m - 2; i >= 0; i--) {
if(obstacleGrid[i][n - 1] == 1) paths[i][n - 1] = 0;
else paths[i][n - 1] = paths[i + 1][n - 1];
}
for(int j = n - 2; j >= 0; j --)
for(int i = m - 2; i >= 0; i --) {
if(obstacleGrid[i][j] == 1) paths[i][j] = 0;
else paths[i][j] = paths[i + 1][j] + paths[i][j + 1];
}
return paths[0][0];
}
public static void main(String[] args) {
System.out.println(uniquePathsII(new int[][]{{0, 0, 0}, {0, 1, 0},{0, 0, 0},}));
System.out.println(uniquePathsII(new int[][]{{0, 0}, {1, 1},{0, 0},}));
}
}

本文探讨了经典路径问题的独特扩展——在网格中加入障碍物的情况下,求解唯一路径的数量。通过实现算法解决3x3网格内包含单个障碍物的问题,并展示了解决过程和代码实现。

195

被折叠的 条评论
为什么被折叠?



