代码随想录算法训练营第29天|62.不同路径、63. 不同路径 II
LeetCode62
2025-03-01 15:56:00 星期六
题目描述:力扣62
文档讲解:代码随想录(programmercarl)62.不同路径
视频讲解:《代码随想录》算法视频公开课:动态规划中如何初始化很重要!| LeetCode:62.不同路径
代码随想录视频内容简记
这道题需要定义一个二维dp数组
梳理
-
确定dp[i][j]数组的含义,表示从[0][0]到[i][j]一共有多少种不同的走法
-
确定递归公式,
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
-
初始化dp数组,dp数组的初始化需要将最上一行以及最左一列进行初始化。因为本题机器人只能从上往下走,从左往右走,所以最上边和最左边是必须要进行初始化的
如果是最左边一列和最上边一行,他的路径走法是只有一种的,只能沿着一条路径走
-
确定遍历顺序,那么根据题意,就是从上往下遍历,从左往右遍历
-
打印dp数组
LeetCode测试
注意,这个题在写for循环的时候有一个小细节,初始化是从1开始的,而不是0
点击查看代码
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m, vector<int>(n, 0));
for (int i = 0; i < m; i++) dp[i][0] = 1;
for (int i = 0; i < n; i++) dp[0][i] = 1;
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[m - 1][n - 1];
}
};
LeetCode63
题目描述:力扣63
文档讲解:代码随想录(programmercarl)63. 不同路径 II
视频讲解:《代码随想录》算法视频公开课:动态规划,这次遇到障碍了| LeetCode:63. 不同路径 II
代码随想录视频内容简记
这道题和62的区别就在于设置了障碍物,感觉确实没思路,听了一下视频讲解
要点
-
因为设置了障碍物,所以递推公式会发生变化,就是如果这个方格中是障碍物,也就是1,那么就不进行递推
-
其次就是dp数组初始化,一旦最左列和最上行出现了障碍物,那么这个障碍物后面的格子必然不发到达,所以只初始化到第一个障碍物出现
-
如果第一个格子就是障碍物,或者最后一个格子是障碍物,那么直接return 0即可
梳理
-
定义dp[i][j]数组,这里仍然表示的是到达[i][j]有多少种路径
-
确定递推公式,这里加上一个if判断即可
-
初始化dp数组,
for (int i = 0; i < m && obstacle[i][0] == 0; i++)
-
确定遍历顺序,和62一样
-
打印dp数组
LeetCode测试
整体和62一致,处理好细节即可
点击查看代码
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
if (obstacleGrid[0][0] == 1) return 0;
if (obstacleGrid[obstacleGrid.size() - 1][obstacleGrid[0].size() - 1] == 1) return 0;
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
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 i = 0; i < n && obstacleGrid[0][i] == 0; i++) dp[0][i] = 1;
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (obstacleGrid[i][j] != 1) dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[m - 1][n - 1];
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端