和上一道没有障碍物的相比就是多了点判断
还是dp的
c++
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
const size_t m = obstacleGrid.size(), n = obstacleGrid[0].size();
if (obstacleGrid[0][0] == 1) return 0;
long int dp[m][n]={1};
for(int i=1; i<m; i++) {
if ((dp[i-1][0]) == 0 || (obstacleGrid[i][0] == 1))
dp[i][0] = 0;
else
dp[i][0] = 1;
}
for(int i=1; i<n; i++) {
if ((dp[0][i-1]) == 0 || (obstacleGrid[0][i] == 1))
dp[0][i] = 0;
else
dp[0][i] = 1;
}
for(int i=1; i<m; i++) {
for(int j=1; j<n; j++) {
if (obstacleGrid[i][j] == 1)
dp[i][j] = 0;
else
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
};