-题目-
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.
-思路-
这道题只是之前那道Unique Path的进阶,其实还是比较简单的,只是在原来的基础上,加上对当前grid值的判断,如果为1,则到达当前结点的路径数设置为0.
-代码-
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();
if(m == 0) return 0;
vector<vector<int> > path(m);
for(int i = 0; i < m; i++) {
path[i].resize(obstacleGrid[i].size(), 0);
}
if(obstacleGrid[0][0]) path[0][0] = 0; // is Obstacle
else path[0][0] = 1;
for(int i = 0; i < m; i++) {
for(int j = 0; j < obstacleGrid[i].size(); j++) {
if(i == 0 && j == 0) continue;
else if(obstacleGrid[i][j]) path[i][j] = 0;
else if(i == 0) path[i][j] = path[i][j-1];
else if(j == 0) path[i][j] = path[i-1][j];
else {
path[i][j] = path[i-1][j] + path[i][j-1];
}
}
}
return path[m-1][obstacleGrid[m-1].size()-1];
}
};