这道题目相对于不同路径的难点就在于多了初始化和递推过程中的判断
解法是一开始将dp全部设置为不可达0,初始化时第0行如果碰到障碍那么后面的路径都不可达直接break,第0列同理
递推过程中只有当前不为障碍点,上边和左边格子不为障碍点再累加
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
vector<vector<int>> dp(m, vector<int>(n, 0));
for(int i=0;i<m;i++){
if(!obstacleGrid[i][0])
dp[i][0]=1;
else
break;
}
for(int j=0;j<n;j++){
if(!obstacleGrid[0][j])
dp[0][j]=1;
else
break;
}
for (int i = 1; i < m; i++)
for (int j = 1; j < n; j++) {
if (!obstacleGrid[i][j]) {
if (!obstacleGrid[i - 1][j])
dp[i][j] += dp[i - 1][j];
if (!obstacleGrid[i][j - 1])
dp[i][j] += dp[i][j - 1];
}
}
return dp[m - 1][n - 1];
}
};