这个和不同路径1的思路基本相同,只是碰到障碍物时,将通过障碍物的路径全部置零即可。
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
// 记录最小路径的网格
vector<vector<int>> grid(obstacleGrid.size(),vector<int>(obstacleGrid[0].size(),0));
for(int i = 0;i<obstacleGrid.size();i++){
for(int j=0;j<obstacleGrid[0].size();j++){
// 当遇到障碍物时,通过该网格的路径全部置零
if(obstacleGrid[i][j] == 1){
grid[i][j] = 0;
}else{
// 边界判定
if((i-1)>=0&&(j-1)>=0){
// 当网格不在边界时
grid[i][j] = grid[i-1][j]+grid[i][j-1];
}else if((i-1)>=0&&(j-1)<0){
// 第一行
grid[i][j] = grid[i-1][j];
}else if((i-1)<0&&(j-1)>=0){
// 第一列
grid[i][j] = grid[i][j-1];
}else{
// 第一个网格
grid[i][j] = 1;
}
}
}
}
return grid[obstacleGrid.size()-1][obstacleGrid[0].size()-1];
}
};