62题的加强版本,需要注意的是如果右下角本身为1,那么无论如何都到达不了,直接返回0。
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m=obstacleGrid.length;
int n=obstacleGrid[0].length;
if(obstacleGrid[m-1][n-1]==1){
return 0;
}
int[][] dp = new int[m][n];
dp[0][0] = 1;
Scanner sc = new Scanner(System.in);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i == 0 && j == 0) {
} else {
if (i == 0) {
//1-obstacleGrid[i][j-1]解释:当obstacleGrid[i][j-1]值为
//1时,减去后为0,刚好乘积为0,刚好又可以舍弃
dp[i][j] = dp[i][j - 1]*(1-obstacleGrid[i][j-1]);
} else if (j == 0) {
dp[i][j] = dp[i - 1][j]*(1-obstacleGrid[i-1][j]);
} else {
dp[i][j] = dp[i][j - 1]*(1-obstacleGrid[i][j-1]) + dp[i - 1][j]*(1-obstacleGrid[i-1][j]);
}
}
}
}
return dp[m-1][n-1];
}
}