目录
62 不同路径
class Solution {
public:
int uniquePaths(int m, int n) {
//1 dp数组的意义是记录到达每个指定节点的路径数量
vector<vector<int>> dp(m+1, vector<int>(n+1));
//2 数组初始化
//给第一列(下标为0)初始化
for(int i = 1; i <= n; i++){
dp[0][i] = 0;
}
//给第二行(下标为1)初始化
for(int j = 1; j <= m; j++){
dp[j][1] = 1;
}
for(int i = 1; i <= m; i++){//遍历行
for(int j = 2; j <= n; j++){//遍历列
dp[i][j] = dp[i][j-1] + dp[i-1][j];
}
}
return dp[m][n];
}
};
63 不同路径 II
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();//行数
int n = obstacleGrid[0].size();//列数
vector<vector<int>> dp(obstacleGrid.size()+1, vector<int>(obstacleGrid[0].size()+1, 0));
//2 初始化dp数组
for(int i = 1; i <= m && obstacleGrid[i-1][0] != 1; i++){//初始化行
dp[i][1] = 1;
}
for(int j = 1; j <= n && obstacleGrid[0][j-1] != 1; j++){//初始化行
dp[1][j] = 1;
}
//3 遍历数组
for(int i = 2; i <= m; i++){
for(int j = 2; j <= n; j++){
if(obstacleGrid[i-1][j-1] == 1){
dp[i][j] = 0;
}else{
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
return dp[m][n];
}
};