代码随想录训练营Day 43|力扣62.不同路径、63. 不同路径 II

1.不同路径

代码随想录

视频讲解:动态规划中如何初始化很重要!| LeetCode:62.不同路径_哔哩哔哩_bilibili

代码:

cpp 复制代码
class Solution {
public:
    int uniquePaths(int m, int n) {
        // dp[i][j] 表示从起点走到坐标为i,j的地方的方法数
        vector<vector<int>> dp(m,vector<int>(n,0));
        // 初始化
        for(int i = 0;i < m; i++) dp[i][0] = 1;
        for(int j = 0;j < n; j++) dp[0][j] = 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];
    }
};

思路:

dp数组的含义:从起点走到坐标为i,j的方法数

递推公式:因为只能向右或向下走,所以dp[i][j] = dp[i - 1][j] + dp[i][j - 1]

初始化:因为是由左方的方法数,和上方的方法数推出来的,因此,我们只需要初始化最上方的行,和最左边的列。而我们的dp数组的含义是方法数,因此,它们全部初始化为1.

遍历顺序:从上到下,从左到右

这道题,我还是出错了,虽然我递推公式写对了,但是我在初始化的时候,没有想到我的dp数组表示方法数,我写成了步数。

2.不同路径2

代码随想录
视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6

代码:

cpp 复制代码
class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        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 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] == 0){
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }
        return dp[m - 1][n - 1];
    }
};

思路:

dp数组的含义:从起点走到坐标为i,j的方法数

递推公式:因为只能向右或向下走,所以dp[i][j] = dp[i - 1][j] + dp[i][j - 1]

初始化:因为是由左方的方法数,和上方的方法数推出来的,因此,我们只需要初始化最上方的行,和最左边的列。而我们的dp数组的含义是方法数,因此,它们全部初始化为1.

遍历顺序:从上到下,从左到右

和上一题的区别主要体现在初始化和递推公式上,在初始化时,如果遇到了障碍,就应该停止初始化(这样没有被初始化的dp元素默认为0种方法);在递推时,加上判断条件,判断我们的目标地点没有障碍时,再进行递推。

相关推荐
清梦202015 分钟前
经典问题---跳跃游戏II(贪心算法)
算法·游戏·贪心算法
Dream_Snowar37 分钟前
速通Python 第四节——函数
开发语言·python·算法
Altair澳汰尔1 小时前
数据分析和AI丨知识图谱,AI革命中数据集成和模型构建的关键推动者
人工智能·算法·机器学习·数据分析·知识图谱
A懿轩A1 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
Python机器学习AI1 小时前
分类模型的预测概率解读:3D概率分布可视化的直观呈现
算法·机器学习·分类
kkflash32 小时前
提升专业素养的实用指南
学习·职场和发展
吕小明么2 小时前
OpenAI o3 “震撼” 发布后回归技术本身的审视与进一步思考
人工智能·深度学习·算法·aigc·agi
1 9 J2 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
程序员shen1616112 小时前
抖音短视频saas矩阵源码系统开发所需掌握的技术
java·前端·数据库·python·算法
sinat_307021533 小时前
大数据政策文件——职业道德(山东省大数据职称考试)
大数据·职场和发展