思路
从递归五部曲开始
1.定义dp数组的含义
dp[i][j]的值:表示到(i,j)节点的路径个数。
2.递推公式
dp[i][j] = dp[i-1][j]+dp[i][j-1];
3.dp数组初始化
当obstacleGrid数组中的元素值为1时,此元素所在行右边的所有元素都是0;此元素所在列下面的所有元素都是0。
注意:此时obstacleGrid(i,j)为1的元素及其右边和下边的元素在dp数组中都是0。
4.遍历顺序
从第二行第二列开始,如果obstacleGrid当前位置(i,j)为1,则跳过该位置。直到遍历完毕为止。
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
int dp[][] = new int[m][n];
//初始化dp数组
for(int i = 0;i<m;i++){
if(obstacleGrid[i][0]==0){
dp[i][0] = 1;
}else{
break;
}
}
for(int j = 0;j<n;j++){
if(obstacleGrid[0][j]==0){
dp[0][j] = 1;
}else{
break;
}
}
//遍历
for(int i = 1;i<m;i++){
for(int j = 1;j<n;j++){
if(obstacleGrid[i][j] == 0){
dp[i][j] = dp[i-1][j]+dp[i][j-1];
}else{
continue;
}
}
}
return(dp[m-1][n-1]);
}
}