代码随想录算法训练营第39天| 62.不同路径,63. 不同路径 II

simulink可控励磁同步电机模型分析 他励同步电机模型分析 阅读详情

代码随想录算法训练营第39天| 62.不同路径,63. 不同路径 II

62.不同路径

题目链接:62.不同路径,难度:中等
【实现代码】

class Solution {
public:
    int uniquePaths(int m, int n) {
        /*
            dp[i][j]代表了走到第(i, j)坐标有几种路径
            dp[i][j] = dp[i-1][j] + dp[i][j-1]

        */
        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];
            }
        }
        // for (int i = 0; i < dp.size(); i++) {
        //     for (int j = 0; j < dp[i].size(); j++) {
        //         cout << dp[i][j] << " ";
        //     }
        //     cout << endl;
        // }
        return dp.back().back();
    }
};

【解题思路】

动态规划五步曲:

  1. 确定dp数组的含义:dp[i][j]代表了走到坐标(i,j)的不同路径数
  2. 确定状态转移公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]
  3. 初始化dp数组:dp[0][j]和dp[i][0]都为1
  4. 确定遍历顺序:从左到右一层一层遍历
  5. 举例推导dp数组

63. 不同路径 II

题目链接:63. 不同路径 II,难度:中等
【实现代码】

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 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];
                }
            }
        }
        // for (int i = 0; i < dp.size(); i++) {
        //     for (int j = 0; j < dp[i].size(); j++) {
        //         cout << dp[i][j] << " ";
        //     }
        //     cout << endl;
        // }
        return dp.back().back();
    }
};

【解题思路】

动态规划五步曲:

  1. 确定dp数组的含义:dp[i][j]代表了走到坐标(i,j)的不同路径数
  2. 确定状态转移公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]
  3. 初始化dp数组:没有遇到障碍物时,dp[0][j]和dp[i][0]都为1,遇到障碍物后全部都为0,这里的结束循环太妙了
  4. 确定遍历顺序:从左到右一层一层遍历
  5. 举例推导dp数组
R语言使用caret包的confusionMatrix函数计算混淆矩阵、使用编写的自定义函数可视化混淆矩阵(confusion matrix) 阅读详情

相关推荐

基于PDF文档结构的数字隐写

PDF隐写

xiongshivigor的博客 1426

代码随想录算法训练营第39天 |62.不同路径、63.不同路径 II

链接: 62.不同路径 链接: 63. 不同路径II62.不同路径:向下和向右的数量是一定的,所以一共有多少条路径本质上是一定数量的向左向右的两个选项的排列组合种类有多少。回想一下动态规划五部曲,首先是递推公式。 63.不同路径II:由于输入的是mxn的网格数组,只有障碍物的地方定为1,如果没有障碍,就跟上一题一样,通过上和左的递推公式进行递推,但是有障碍物的情况下,应当避开障碍物,是否可以分段进行呢?障碍物的上边和左边总路径加起来算作从起点到障碍物的路径总数,从障碍物到终点的路径记作另一个结果。所以是两个

qq_45163431的博客 1163

几何非线性-屈曲分析

结构系统的破坏分为两种,一类是因材料软化而引起的强度破坏,另一类是几何软化使得结构的几何形状发生极大变化,从而使结构丧失承载能力。在材料力学中是这样定义压杆失稳的:中心受压直杆(理想模型)在直线状态下平衡,由稳定平衡转化为不稳定平衡时所受的轴向压力的界限值,称为临界压力。中心受压直杆在临界压力的作用下,其直线形态的平衡开始丧失稳定性,简称为失稳。显然,这个定义只使用于理想的压杆模型,那么关于失稳和屈曲是否存在一般性定义呢?

YORU_NO_KUNI的博客 1万+

代码随想录算法训练营第39天| Leetcode 62.不同路径、Leetcode 63. 不同路径 II

这两道题还是比较简单的,递推公式很好想到。最后,如果文章有错误,请在评论区或私信指出,让我们共同进步!

Camellia__Wang的博客 1404

Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南)

本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。

weixin_28363123的博客 797

多目标跟踪中使用trackeval评估dancetrack运行结果

trackeval使用

qq_46144849的博客 1783

代码随想录算法训练营第39天 | 62.不同路径 63. 不同路径 II

从递归公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 中可以看出,一定是从左到右一层一层遍历,这样保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值。那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。机器人每次只能向下或者向右移动一步。

Laulian的博客 1272

【个人记录】CentOS7升级glibc至2.28

由于CentOS7系统已经停止支持, 虽然大部分业务已经迁移至OpenEuler,但仍然有部分业务系统跑在CentOS7上。在尝试部署新业务环境时经常会提示如下错误(以code-server运行需要的node 20为例)node -v为了保障业务可正常运行,通常采用Docker继承好的node环境进行部署,但部分场景还是需要宿主机使用新版glibc版本。本文记录本人一次成功升级glibc(2.17=>2.28)的步骤。

喵呜 3883

代码随想录算法训练营第39天| 62.不同路径 63. 不同路径 II

JAVA代码编写一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?2 * 109。

Catherinemin的博客 1843

ABAP BDC 处理踩坑笔记:把错误挡在录制之前,把稳定做进每一行 BDCDATA

本文总结了SAP BDC(批输入)开发中的常见问题和解决方案。重点包括:1)理解BDCDATA本质是模拟人工操作而非直接操作数据库;2)数据格式化技巧,如金额、日期、物料号等字段的标准化处理;3)通过CTU_PARAMS参数控制执行环境,确保屏幕尺寸和更新模式一致;4)不要依赖sy-subrc,应通过解析MESSTAB消息判断业务是否成功;5)录制阶段的常见陷阱及解决方法;6)疑难问题的系统性解决思路;7)建议建立完善的错误处理机制,包括日志记录和重跑功能。文章提供了实用的ABAP代码示例和配置建议,帮助开

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 265

【推荐100个unity插件】帮助你快速开发一款FPS游戏—— FPS Framework

FPS Framework 快速入门指南 FPS Framework 是一个 Unity 开发框架,可加速 FPS 游戏开发。主要功能包括: 第一人称控制器:基于 Character Controller 实现,提供移动、跳跃、下蹲等功能,支持自定义参数调整 渲染管线转换:内置 RP 转换器,支持 URP/HDRP 等渲染管线一键切换 库存系统: 采用双列表管理:物品列表(Items)和可收集物列表(Collectables) 支持自定义库存物品和可收集物类型 提供拾取/丢弃功能实现 快速开始: 通过预制件

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2569

代码随想录算法训练营第39天 | 62.不同路径 , 63. 不同路径 II

代码随想录算法训练营第39天 动态规划Part02

Aaron_Yang 1004

Opencascade 保存点云为 .stp 和 .step 格式

总结一下,OpenCascade提供了强大的功能和工具,使我们能够方便地将点云数据保存为 .stp 和 .step 格式。通过使用类似于上述示例代码的方法,你可以使用OpenCascade库将点云数据保存为.STP和.STEP格式。总结一下,使用OpenCascade库,你可以方便地将点云数据保存为.STP和.STEP格式。通过使用类似于上述示例代码的方法,你可以将点云数据转换为OpenCascade的几何模型,并将其保存为所需的文件格式。请注意,上述代码仅涵盖了将点云数据保存为.STP格式的基本步骤。

CwzCode的博客 1157

代码随想录算法训练营第39天|62.不同路径 |63. 不同路径 II

注意,里面的dp是记录的几条路径,不是什么移动的次数(***)

2401_83080774的博客 454

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【代码随想录】【算法训练营】【第39天】 [62]不同路径 [63]不同路径II [343]整数拆分 [96]不同的二叉搜索树

思路及算法思维,指路。题目来自。day 39,周六,坚持不住了~

day day up 989

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

代码随想录算法训练营第39天 | LeetCode62. 不同路径、LeetCode63.不同路径II。

从递归公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 中可以看出,一定是从左到右一层一层遍历,这样保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值;下标(0, j)的初始化情况同理;那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来;这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的;

Yuki__u的博客 672

代码随想录算法训练营第39天 | 62.不同路径, 63不同路径II

状态转移方程:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]但这里我们需要注意的是遇到障碍物我们要continue,肯定不能用break啊,因为我们又不知一种走的方法,也不想最外围那两条边只要路被堵了后面就坑定过不去了。初始化:我们需要对[i][0]和[0][i]这两条边进行初始化。状态转移方程:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]因为只能向下或者向右走。dp[i][j]的含义:到达二维图的(i,j)点的路径条数。

2301_76612880的博客 419

代码随想录算法训练营第39天 | 62.不同路径 + 63.不同路径 II

题目二相较于题目一在初始化时要注意碰到障碍物时的处理。

weixin_52443257的博客 1033

代码随想录算法训练营第39天| 62.不同路径、63. 不同路径 II

if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) //如果在起点或终点出现了障碍,直接返回0。从前做了,还算有印象,当前元素从上边和左边的值计算得出。加入障碍后,代码需要相应地改变。

kline189的博客 474

代码随想录算法训练营第39天 | 62.不同路径 63.不同路径II

这道题我记得之前是用深搜(我到现在自己还没法独立写出,但是用动态规划的话我现在已经回了,其实也就是找出dp[i][j]表示到第i行第j列的路径数量,初始化的话是第一行和第一列都为1,因为到第一行和第一列的点的路径只有1。

weixin_72346414的博客 731

代码随想录算法训练营第39天|62.不同路径、63. 不同路径 II

1.确定dp数组(dp table)以及下标的含义:dp[x][y]到达(x,y)存在的路径数量。相比于上一题,就多了个判断该点是否为障碍点,如果是障碍点就保持初始值0不变,不参与状态转移。2.确定递推公式:dp[x][y] = dp[x-1][y] + dp[x][y-1]3.dp数组如何初始化:dp[1][j] = 1;4.确定遍历顺序:x++;5.举例推导dp数组。

wx_xxxx的博客 545

代码随想录算法训练营第39天||62.不同路径 、 63. 不同路径 II

由于只给了障碍物的位置,则先需要从障碍物的位置推出dp数组的大小,然后初始化第一行和第一列为1,但是此时要注意如果障碍物在第一行或者第一列的话,需要将障碍物后面或者下面都为0,因为这时障碍物之后的路走不通,状态转移方程与62题一致,只不过当推到障碍物的位置时不需要进行状态转移即可。忽略了障碍物在起始点的情况,初始化的步骤写起来有点生疏,但都是基础语法。构建二维dp数组有点生疏。

m0_61777309的博客 428

代码随想录算法训练营第39天 | ● 62.不同路径 ● 63. 不同路径II

从递归公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 中可以看出,一定是从左到右一层一层遍历,这样保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值。那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。

m0_51671538的博客 444

代码随想录算法训练营第39天 || 62.不同路径 || 63. 不同路径 II

代码随想录算法训练营第39天 || 62.不同路径 || 63. 不同路径 II

m0_63617655的博客 558

代码随想录算法训练营第39天|62.不同路径 63. 不同路径 II

63. 不同路径 II。

dieforcpp的博客 313

代码随想录算法训练营第39天 | 62.不同路径 63.不同路径 II

可以图论中的深度优先搜索,可以将每一次的选择抽象为二叉树的两个子节点,这样所有的路径集合就被抽象成了一棵二叉树,求的路径数目就是二叉树叶子节点的数目。树的层数为 m+n-1,深搜近似遍历了树的所有节点,因此程序的时间复杂度近似于指数级,是会超时的。动态规划实现如下,其实还可以用滚动数组的方式进一步做空间优化,当前的状态只与左侧和上面的状态有关,可以只用一个一维数组表示,其自身就是上次遍历(上一行)的值,只需要加上左侧的值就可以得到这次遍历(本行)的值。int。

qq_44173169的博客 1179
上一篇: 代码随想录算法训练营第38天|509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
下一篇: 代码随想录算法训练营第41天| 343. 整数拆分,96.不同的二叉搜索树
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值