java-代码随想录第33天|62.不同路径、63.不同路径II
目录
62.不同路径
63.不同路径II
学习链接:代码随想录
62.不同路径
链接:62. 不同路径 - 力扣(LeetCode)
题目:
一个机器人位于一个
m x n
网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
class Solution {public int uniquePaths(int m, int n) {//dp代表路径数int[][] dp=new int[m][n];//进行dp初始化for(int i=0;i<m;i++){dp[i][0]=1;} for(int j=0;j<n;j++){dp[0][j]=1;} //i,j只能从1开始for(int i=1;i<m;i++){for(int j=1;j<n;j++){//推导式dp[i][j]=dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1];}
}
63.不同路径II
链接:63. 不同路径 II - 力扣(LeetCode)
题目:
给定一个
m x n
的整数数组grid
。一个机器人初始位于 左上角(即grid[0][0]
)。机器人尝试移动到 右下角(即grid[m - 1][n - 1]
)。机器人每次只能向下或者向右移动一步。网格中的障碍物和空位置分别用
1
和0
来表示。机器人的移动路径中不能包含 任何 有障碍物的方格。返回机器人能够到达右下角的不同路径数量。
测试用例保证答案小于等于
2 * 109
。
class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int m = obstacleGrid.length;int n = obstacleGrid[0].length;int[][] dp = new int[m][n];//如果在起点或终点出现了障碍,直接返回0if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) {return 0;}//如果有障碍的话,后面都不进行初始化for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) {dp[i][0] = 1;}//如果有障碍的话,后面都不进行初始化for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) {dp[0][j] = 1;}for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {//如果obstacleGrid[i][j] == 0代表,此处没有障碍,则按照正常逻辑;//如果不等于0,则代表有障碍,直接返回0dp[i][j] = (obstacleGrid[i][j] == 0) ? dp[i - 1][j] + dp[i][j - 1] : 0;}}return dp[m - 1][n - 1];}
}