参考资料:代码随想录
题目链接:. - 力扣(LeetCode)
此题的解题思路和不同路径 1是一样的,不同点在于网格内出现了障碍物。体现出了初始化的重要性。
1.确定dp数组含义
dp数组中每个元素代表网格内每个位置有几种走法。
2.初始化dp数组
初始化第一行第一列,遇到障碍物的情况下,障碍物后的走法都为0,符合生活常识。
3.确定遍历顺序
因为后面的状态依赖前面的状态推导,所以选择从前向后遍历
4.确定递推公式
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
//1.确定dp数组含义
int[][] dp = new int[obstacleGrid.length][obstacleGrid[0].length];
//2.初始化dp数组
for(int i = 0;i < obstacleGrid.length;i++){
if(obstacleGrid[i][0] != 1){
dp[i][0] = 1;
}else {
break;
}
}
for(int j = 0;j < obstacleGrid[0].length;j++){
if(obstacleGrid[0][j] != 1){
dp[0][j] = 1;
}else {
break;
}
}
//3.确定遍历顺序
for(int i = 1;i < obstacleGrid.length;i++){
for(int j = 1; j < obstacleGrid[i].length;j++){
if(obstacleGrid[i][j] == 1){
dp[i][j] = 0;
}else {
//4.确定递推公式
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
return dp[dp.length-1][dp[0].length-1];
}
}