62.不同路径
关键点1:path[i][j]代表第i行和第j列的路径数
关键点2:path[0][0]所在的行和列的path数都是1
关键点3:递归公式,两层for循环,从左边和上边的路径相加就是path[i][j] 位置的路径和:path[i][j] = path[i][j-1] + path[i-1][j];最后返回path[m-1][n-1];
class Solution {
public int uniquePaths(int m, int n) {
int[][] path = new int[m][n];
for(int i = 0; i < m;i++){
path[i][0] = 1;
}
for(int j = 0;j < n;j++){
path[0][j] = 1;
}
for(int i = 1;i < m;i++){
for(int j = 1;j < n;j++){
path[i][j] = path[i][j-1] + path[i-1][j];
}
}
return path[m-1][n-1];
}
}
63. 不同路径 II
关键点1:path[i][j]代表第i行和第j列的路径数
关键点2:path[0][0]所在的行和列的path数不都是1了
2-1:遍历时,只有保证obstacleGrid[i][0] == 0,path[i][0] == 1;
2-2:遍历时,只有保证obstacleGrid[0][j] == 0,path[0][j] == 1;
关键点3:递归公式,两层for循环,同时需保证obstacleGrid[i][j] ==0,左边和上边的路径相加才是path[i][j] 位置的路径和:path[i][j] = path[i][j-1] + path[i-1][j];最后返回path[m-1][n-1];
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
if(obstacleGrid[0][0] == 1 || obstacleGrid[m-1][n-1] == 1){
return 0;
}
int[][] path = new int[m][n];
for(int i = 0; i < m && obstacleGrid[i][0] == 0;i++){
path[i][0] = 1;
}
for(int j = 0;j < n && obstacleGrid[0][j] == 0;j++){
path[0][j] = 1;
}
for(int i = 1; i < m; i++){
for(int j = 1; j < n; j++){
if(obstacleGrid[i][j] == 0){
path[i][j] = path[i-1][j] +path[i][j-1];
}
}
}
return path[m-1][n-1];
}
}