给定一个网格,0代表可以通过,1代表有障碍物,不能通过,求出有多少路径。
思路: 这是之前路径问题的升级版,我们首先要判断一下当前的网格是否有障碍,如果有障碍的话就将当前的dp记为0,因为不可能到达这里。然后将开始的位置00 记为 1,如果在第一行或者是第一列就只需要其前面或者上面的信息,否则是可以在上边或者左边两个地方过来的。
public class Solution {
/**
* @param obstacleGrid: A list of lists of integers
* @return: An integer
*/
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
// write your code here
int row = obstacleGrid.length;
int col = obstacleGrid[0].length;
int[][] dp = new int[row][col];
int i, j;
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
if(obstacleGrid[i][j] == 1){
dp[i][j] = 0;
continue;
}
if(i == 0 && j == 0){
dp[0][0] = 1;
continue;
}
if(i == 0){
dp[i][j] = dp[i][j - 1];
continue;
}
if(j == 0){
dp[i][j] = dp[i - 1][j];
continue;
}
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[row - 1][col - 1];
}
}