2025年--Lc185--63.不同路径II(动态规划,矩阵)--Java版
1.题目描述
2.思路
(1)dp含义:到当前位置的路径数
(2)初始化:如果遇到障碍物就直接break。其他的第一行和第一列的格子数值初始化为1.
(3)dp递推表达式:dp[i][j]=dp[i-1][j]+dp[i][j-1]
(4)遍历顺序:先遍历行数再遍历列数,只要遇到矩阵的值为0(不是障碍物),我们进行动态规划的dp递推表达式.
(5)终止条件:最后返回到达最后一格的路径数dp[m-1][n-1]
3.代码实现
class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {//先获取矩阵的行数和列数//1.行数int m=obstacleGrid.length;//2.列数,比如第一组有几个元素就有几列int n=obstacleGrid[0].length;//3.dp数组的初始化int[][] dp=new int[m][n];//4.第一行初始化为1,遇到障碍物跳过for(int i=0;i<n;i++){if(obstacleGrid[0][i]==1)break;dp[0][i]=1;}//5.第一列初始化为1,遇到障碍物跳过for(int j=0;j<m;j++){if(obstacleGrid[j][0]==1) break;dp[j][0]=1;}//第一行/列已经初始化过,所以从第二行第二列开始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];}}}return dp[m-1][n-1];}
}