代码随想录训练营打卡第34天|62.不同路径 63.不同路径II
62.不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
题目链接
个人题解
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp;
dp.resize(m);
for(int i=0;i<m;i++)
dp[i].resize(n);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(i==0||j==0)
dp[i][j]=1;
else
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
return dp[m-1][n-1];
}
};
复杂度分析
- 时间复杂度:M*N
- 空间复杂度:M*N
解题思路
二维dp经典题目,每到一格的路径都等于其上一个路径数和左一格路径数的和
63.不同路径II
给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。
网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的移动路径中不能包含 任何 有障碍物的方格。
返回机器人能够到达右下角的不同路径数量。
测试用例保证答案小于等于 2 * 109。
题目链接
个人题解
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
vector<vector<int>> dp;
dp.resize(obstacleGrid.size());
for(int i=0;i<obstacleGrid.size();i++)
dp[i].resize(obstacleGrid[0].size());
int m=obstacleGrid.size();
int n=obstacleGrid[0].size();
int bflag=0;
for(int i=0;i<n;i++){
if(obstacleGrid[0][i])
bflag=1;
if(bflag)
dp[0][i]=0;
else
dp[0][i]=1;
}
bflag=0;
for(int i=0;i<m;i++){
if(obstacleGrid[i][0])
bflag=1;
if(bflag)
dp[i][0]=0;
else
dp[i][0]=1;
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
if(obstacleGrid[i][j])
dp[i][j]=0;
else
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
return dp[m-1][n-1];
}
};
//官解,我处理的有点复杂了
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) //如果在起点或终点出现了障碍,直接返回0
return 0;
vector<vector<int>> dp(m, vector<int>(n, 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++) {
if (obstacleGrid[i][j] == 1) continue;
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[m - 1][n - 1];
}
};
复杂度分析
- 时间复杂度:M*N
- 空间复杂度:M*N
解题思路
同上一道,不过遇到障碍把方法数置0即可
今日总结
早点休息吧,最近好多事,这学期算法课又步骤了实验,感觉自己认真自己做一次实验得两三天,有些人半小时就搞定了,唉,无穷尽噫。
原文地址:https://blog.csdn.net/qq_73823477/article/details/144299754
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!