代码随想录第39天 | 62.不同路径 、 63. 不同路径 II

一、前言

参考文献:代码随想录

今天主要的题目是动态规划的路径问题,动态规划五要点;

1、确定dp数组,dp[i]代表什么i代表什么;

2、递推公式;

3、初始化dp数组;

4、遍历顺序;

5、打印dp数组;

二、不同路径

1、思路:

我感觉动态规划,我听的很认真,然后这个题目,我有一点感觉,但是我又想不出来,只好去求看一下卡哥,但是才看了三分钟,我就想到思路了。。。

(1)dp数组,由于这是一个二维图,所以需要创建一个二维的dp数组,i,j分别代表一个点位,dp[i][j]代表到达该点的位置;

(2)初始化:我们发现,机器人只允许向右或者向下移动,所以在[i][0]上面的情况全是1,以及[0][j]也全是1,所以这就是初始化;

(3)递推公式:

当我把图画出来后不难发现当需要拐弯时,那个结点的情况就是上面的路径加上左边的路径;

(图很潦草)但是也能看懂,所以递推公式就是:

dp[i][j] = dp[i - 1][j] + dp[i][j - 1];

(4)遍历顺序:很显然,我们是要慢慢的积累我们不同路径的数量,所以是从最小的地方开始,但是不是用上边界和左边界,而是从[1][1]的地方开始;

2、整体代码如下:

class Solution {
public:int uniquePaths(int m, int n) {// 1、定义dp数组,i,j表示位置,dp[i][j]表示到达结点的次序vector<vector<int>> dp(m, vector<int>(n));// 2、初始化dp数组for (int i = 0; i < m; i++) {dp[i][0] = 1;}for (int j = 0; j < n; j++) {dp[0][j] = 1;}// 3、遍历for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {// 4、递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}// 5、打印dp数组// for (int i = 0; i < m; i++) {//     for (int j = 0; j < n; j++) {//         cout << dp[i][j] << " ";//     }//     cout << endl;// }return dp[m - 1][n - 1];}
};

三、不同路径||

1、思路:

这个题目和上一个不同路径的题目思路差不多,但是其中多了障碍物,所以在递推公式上,我们就得分很多种情况,来做出不同的措施;

(1)dp数组,与上一个题目的作用相同;

(2)初始化,这里的初始化就有一些区别。因为在初始化上边界和左边界时可能会出现障碍物,一旦出现,就需要把后面的路径数设置为0:

        for (int i = 0; i < m; i++) {if (obstacleGrid[i][0] == 1) {for (int j = i; j < m; j++) {dp[i][0] = 0;}break;}dp[i][0] = 1;}for (int j = 0; j < n; j++) {if (obstacleGrid[0][j] == 1) {for (int i = j; i < n; i++) {dp[0][j] = 0;}break;}dp[0][j] = 1;}

(3)递推公式:在递推公式中,我们需要做出以下几种情况的判断,

1、如果当前[i][j]位置有障碍物,则直接设置为0;

2、如果上方有障碍物,左边没有:则只累加左边的pd[i - 1][j]数组的值 ;

3、相反,则只累加上方dp[i][j - 1];

4、同时出现障碍物时,dp[i][j]设置为0;

5、没有障碍物,就正常相加;

(4)遍历顺序:

也是从[1][1]开始遍历,从浅带到深;

(5)打印dp数组(debug);

2、整体代码如下:

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) return 0;// 1、确定dp数组,和上一题类似;vector<vector<int>> dp(m, vector<int>(n));// 2、同样的方法初始化for (int i = 0; i < m; i++) {if (obstacleGrid[i][0] == 1) {for (int j = i; j < m; j++) {dp[i][0] = 0;}break;}dp[i][0] = 1;}for (int j = 0; j < n; j++) {if (obstacleGrid[0][j] == 1) {for (int i = j; i < n; i++) {dp[0][j] = 0;}break;}dp[0][j] = 1;}// 3、遍历顺序for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {// 情况0:当前的坐标有障碍物if (obstacleGrid[i][j] == 1) {dp[i][j] = 0;continue;}// 情况1:左边出现障碍物if (obstacleGrid[i - 1][j] == 1 && obstacleGrid[i][j - 1] != 1) {dp[i][j] = dp[i][j - 1];// 情况2:上方出现障碍物} else if (obstacleGrid[i - 1][j] != 1 && obstacleGrid[i][j -1] == 1) {dp[i][j] = dp[i - 1][j];// 情况3:左右均有障碍物} else if (obstacleGrid[i - 1][j] == 1 && obstacleGrid[i][j -1] == 1){dp[i][j] = 0;// 情况4:没有障碍物} else {dp[i][j] = dp[i][j - 1] + dp[i - 1][j];}}}// 5、打印dp数组// for (int i = 0; i < m; i++) {//     for (int j = 0; j < n; j++) {//         cout << dp[i][j] << " ";//     }//     cout << endl;// }return dp[m - 1][n - 1];}
};

今日学习时间:1.5小时;

 Nobody can stop me.

我无人可当!

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp APP真机调试接口请求不到服务器解决方法

项目场景&#xff1a; 在使用Hbuilder开发uniapp的过程中&#xff0c;出现了两个在 Chrome 调试中正常&#xff0c;但打包后异常的问题&#xff0c;特此记录。 问题描述 在 H5 端请求接口正常请求。 App 端 请求接口&#xff0c;提示 "{"errMsg":"reque…

R语言数据可视化:基本绘图系统

目录 plot函数 par函数 hist函数 boxplot函数 plot函数应用实战 全局参数 R语言中有三大绘图系统包括基本绘图系统&#xff0c;Lattice绘图系统&#xff0c;ggplot2绘图系统 基本绘图系统 在R语言中&#xff0c;以下函数通常用于创建和定制图形&#xff1a; plot 函数…

网络通信三要素:IP、端口和协议

IP&#xff1a;设备在网络中的地址&#xff0c;是唯一的标识 IP&#xff1a;全程”互联网协议地址“&#xff0c;是分配给上网设备的唯一标志 IP地址有两种形式&#xff1a; IPv4&#xff1a;32位 IPv6&#xff1a;共128位。分成8段表示&#xff0c;每取四位编码成一个16进制…

分布式技术---------------消息队列中间件之 Kafka

目录 一、Kafka 概述 1.1为什么需要消息队列&#xff08;MQ&#xff09; 1.2使用消息队列的好处 1.2.1解耦 1.2.2可恢复性 1.2.3缓冲 1.2.4灵活性 & 峰值处理能力 1.2.5异步通信 1.3消息队列的两种模式 1.3.1点对点模式&#xff08;一对一&#xff0c;消费者主动…

机器学习——模型评价

概述 在机器学习中&#xff0c;模型评价是评估和比较不同模型性能的关键步骤之一。它是通过对模型的预测结果与真实标签进行比较&#xff0c;从而量化模型的预测能力、泛化能力和稳定性。模型评价旨在选择最佳的模型&#xff0c;理解模型的行为&#xff0c;并为模型的改进提供…

Synchronized简述

1.了解Synchrozied Synchrozied是一种悲观锁&#xff0c;通过Synchroized实现同步机制&#xff0c;在操作数据时&#xff0c;判断该对象是否被锁定&#xff0c;如果被锁定则进入阻塞状态直到被占用的线程释放&#xff0c;如果没有被锁或者当前线程已经存在操作对象的锁则进行上…

SpringBoo利用 MDC 机制过滤出单次请求相关的日志

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1.前言 2.MDC 是什么 3.代码实战 4.总结 1.前言 在服务出现故障时&#xff…

【功能更新】强化知识库管理与AI问答机器人性能

三月HelpLook带来了3大类功能焕新&#xff0c;主要聚焦于&#xff1a;知识库的管理功能升级和AI问答机器人的优化&#xff0c;让我们看看更新了哪些新功能&#xff01; 那么&#xff0c;接下来就让我们来详细了解一下本次升级都带来了哪些新功能吧&#xff01; 知识库使用与管理…

【Linux】应用层协议:HTTP

URL 在之前的文章中我们实现了一个网络版本的计算器&#xff0c;在那个计算器中揉合了协议定制以及序列化反序列化的内容&#xff0c;我们当时也自己定制了一套协议标准&#xff0c;比如请求和响应的格式应该是什么&#xff1f;如何读到一个完整的报文&#xff1f;支持的运算符…

【路径规划】基于六次多项式的多关节机器人避障路径规划

最近迷上了机械臂避障轨迹规划&#xff0c;因为之前一直做的都是无障碍物轨迹规划&#xff0c;所以这次想试一下有障碍物的&#xff0c;把避障算法用在我的SimMechanics机械臂上&#xff0c;看看效果咋样。以下定义不区分路径规划和轨迹规划。   by the way&#xff0c;本文实…

二叉树的定义和基本术语及性质

二叉树是一种特殊的树形数据结构&#xff0c;它对每个节点的子节点数进行了限制&#xff0c;即每个节点最多有两个子节点。这种结构使得二叉树成为了许多算法和数据结构的基础&#xff0c;如二叉搜索树、堆、哈夫曼编码等。本文将详细探讨二叉树的定义、基本术语和性质&#xf…

BGP扩展知识总结

一、BGP的宣告问题 在BGP协议中每台运行BGP的设备上&#xff0c;宣告本地直连路由在BGP协议中运行BGP协议的设备&#xff0c;来宣告通过IGP学习到的未运行BGP协议设备产生的路由&#xff1b;&#xff08;常见&#xff09; 在BGP协议中宣告本地路由表中路由条目时&#xff0c;将…

DNF手游攻略:2024新手攻略大全

在《DNF手游》的世界中&#xff0c;前期阶段对于新手玩家来说至关重要。以下是一份综合整理的新手攻略&#xff0c;帮助玩家快速适应游戏并取得进展。 1. 角色建立策略&#xff1a; 在前期&#xff0c;建议玩家建立3个角色&#xff0c;包括1个大号和2个小号。大号可以根据个人喜…

谷歌google浏览器无法更新Chrome至最新版本怎么办?浏览器Chrome无法更新至最新版本

打开谷歌google浏览器提示&#xff1a;无法更新Chrome&#xff0c;Chrome无法更新至最新版本&#xff0c;因此您未能获得最新的功能和安全修复程序。点击「重新安装Chrome」后无法访问此网站&#xff0c;造成谷歌浏览器每天提示却无法更新Chrome至最新版本。 谷歌google浏览器无…

SaaS知识库哪些比较好用?中小企业也能适用

在快节奏的商业世界中&#xff0c;拥有一个高效、易于使用的知识管理工具是提升工作效率的关键。对于中小企业来说&#xff0c;选择合适的SaaS&#xff08;软件即服务&#xff09;知识库平台尤为重要&#xff0c;因为它不仅能帮助员工快速找到信息&#xff0c;而且还能优化客户…

数据结构进阶之堆

今天我们学习的是数据结构里面的堆&#xff0c;大家先看看我们今天要学习的内容 一、堆概念及认识 在学习堆之前我们得先明白完全二叉树是什么样子&#xff0c;因为堆是依据完全二叉树的结构来实现的&#xff0c;所以在这里我先告诉大家完全二叉树的是什么&#xff0c;如下图…

Excel中输入数字会改变怎么办?

一、数字显示不全&#xff0c;以“#”号代替 随着列宽的缩小&#xff0c;数字逐渐被“#”号代替&#xff08;首先数字的格式是“数值型&#xff0c;且只有整数”&#xff09; 原因分析&#xff1a;单元格中的数字无法完全显示&#xff0c;Excel会自动用“#”号填充剩余的空间 解…

00_如何使用国内镜像源下载QT

如何使用国内镜像源下载QT 如何使用国内镜像源下载QT 如何使用国内镜像源下载QT 第一步&#xff1a;下载下载qt online installer 网站&#xff1a;https://download.qt.io/official_releases/online_installers/ 添加链接描述 下载windows版本 第二步&#xff1a; 剪切放…

搭建个人智能家居 4 -WS2812B-RGB灯

搭建个人智能家居 4 - WS2812B-RGB灯 前言说明ESPHomeHomeAssistant 前言 上一篇文章我们已经完成了第一个外设的添加&#xff08;一个LED灯&#xff09;&#xff0c;今天接着来“壮大”这个系统&#xff0c;添加第二个外设“RGB灯”。 环境搭建可以回顾前面的文章。前文回顾&…

AutoCAD 2024 安装注册教程

前言 大家好&#xff0c;我是梁国庆。 本篇分享的安装包是 AutoCAD 的全新版本——AutoCAD 2024&#xff0c;下文安装教程中简称 AutoCAD。 时间&#xff1a;2024年4月8日。 获取 AutoCAD 安装包 我已将本篇所使用的安装包打包上传至百度云&#xff0c;扫描下方二维码关注…