leetcode 62 题变种,可以先去看一下我写的62题解析
这题和62题十分相似,首先我们要明白这个路径上如果出现了一个障碍意味着什么,说明这条路直接走不通不用记在总数里.
如果这条路出现在上边界或者左边界的话,那么障碍之后的路永远也无法在走到了
所以在数组初始化的时候要做一个判断,如果路径上出现了障碍物,这条路直接退出
其他的和62题一摸一样
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
int dp[][] = new int[m][n];
for(int i = 0; i < m; i++){
if(obstacleGrid[i][0] == 1) //障碍出现在上边界,直接打断循环
break;
dp[i][0] = 1;
}
for(int i = 0; i < n; i++){
if(obstacleGrid[0][i] == 1)//障碍出现在左边界直接打断循环
break;
dp[0][i] = 1;
}
for(int i = 1; i < m ; i++){
for(int j = 1;j < n; j ++){
if(obstacleGrid[i][j] == 1) //如果当前路径出现了障碍,直接退出当前循环
continue;
dp[i][j] = dp[i-1][j] + dp[i][j - 1];
}
}
return dp[m-1][n-1];
}