Similar to the first version, with one more flag check. Remember to initialize the process matrix bottom right to be 1.
public class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
if(obstacleGrid == null || obstacleGrid.length == 0){
return 0;
}
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
if(obstacleGrid[0][0] == 1 || obstacleGrid[m - 1][n - 1] == 1){
return 0;
}
int[][] process = new int[m][n];
process[m - 1][n - 1] = 1;
for(int mi = m - 1; mi >= 0; mi--){
for(int nj = n - 1; nj >= 0; nj--){
if(obstacleGrid[mi][nj] == 1){
process[mi][nj] = 0;
continue;
}
if(mi + 1 < m && nj + 1 < n){
process[mi][nj] = process[mi + 1][nj] + process[mi][nj + 1];
continue;
}
if(mi + 1 < m && obstacleGrid[mi + 1][nj] != 1){
process[mi][nj] = process[mi + 1][nj];
continue;
}
if(nj + 1 < n && obstacleGrid[mi][nj + 1] != 1){
process[mi][nj] = process[mi][nj + 1];
}
}
}
return process[0][0];
}
}
没有评论:
发表评论