该题大部分思路可以根据Leetcode 62. 不同路径这篇博客了解
这里进行基于上面那篇博客后来对该题进行补充
代码展示:
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m=obstacleGrid.length;
int n=obstacleGrid[0].length;
//创建dp数组
int[][]dp=new int[m+1][n+1];
//初始化
dp[0][1]=1;
//填充数组
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(obstacleGrid[i-1][j-1]==1){
dp[i][j]=0;
}else {
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
}
return dp[m][n];
}
}
由于本题中出现了障碍物的概念,所以当遇到障碍物时,我们便不能到达拥有障碍物的位置,所以到达拥有障碍物位置的路径条数为0,即当obstacleGrid[i-1][j-1]为1时,说明有障碍物,则dp[i][j]=0;在填充数组时进行条件的判断,若obstacleGrid[i-1][j-1]为0,则和原来进行相同的处理即可。
注意因为我们添加了辅助结点,所以dp[i][j]对应的是obstacleGrid[i-1][j-1],它们之间的映射关系一定要清楚。