Day39题目
LeetCode62.不同路径
核心思想:动态规划,每一项的路径是上方和左方的和,初始化比较重要,你可以选择把所有的最外层元素都直接初始化为1,也可以创建一个m+1,n+1的数组,把0,1初始化为1.我代码中用的是第二种
class Solution {
public int uniquePaths(int m, int n) {
int[][] dp = new int[m+1][n+1];
// 把0,1初始化为1
dp[0][1] = 1;
for(int i = 1; i <= m ; i ++){
for(int j = 1; j <= n ; j ++){
dp[i][j] = dp[i][j-1]+dp[i-1][j];
}
}
return dp[m][n];
}
}
LeetCode63.不同路径Ⅱ
核心思想:在上题的基础上,加上如果当前位置存在障碍就置为0即可.
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length ;
int n = obstacleGrid[0].length;
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;
continue;
}
int top = dp[i][j-1];
int left = dp[i-1][j];
dp[i][j] = top + left;
}
}
return dp[m][n];
}
}