算法刷题 Day 39 | ● 62.不同路径 ● 63. 不同路径 II
62.不同路径
本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。
https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html
视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu
Tips:这道题我是在上方和左边填0了,这样只要初始化一个(1,1)节点就可以
我的题解:
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m+1,vector<int>(n+1,0));
for(int i = 1; i<=m; i++){
for(int j = 1; j<=n; j++){
if(i == 1 && j == 1){
dp[i][j] = 1;
continue;
}
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m][n];
}
};
63.不同路径 II
视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6
Tips:这题也没啥好说的,遇到障碍物的时候把对应的dp置为0即可。
我的题解:
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
vector<vector<int>> dp(obstacleGrid.size() + 1,vector<int>(obstacleGrid[0].size()+1,0));
for(int i = 1; i<=obstacleGrid.size();i++){
for(int j = 1; j<=obstacleGrid[0].size(); j++){
if(obstacleGrid[i-1][j-1] == 1){
dp[i][j] = 0;
}
else if(i == 1 && j == 1){
dp[i][j] = 1;
}
else{
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
return dp[obstacleGrid.size()][obstacleGrid[0].size()];
}
};

浙公网安备 33010602011771号