代码随想录算法训练营day39 || 62. 不同路径,63. 不同的路径||

视频讲解:

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

动态规划,这次遇到障碍了| LeetCode:63. 不同路径 II_哔哩哔哩_bilibili

62. 不同路径

思路:和前一天的爬楼梯的思路基本一致,变化之处在于dp是二维数组,因此初始化也跟着进行了改变。

// 时间复杂度O(m*n)
// 空间复杂度O(m*n)class Solution {public int uniquePaths(int m, int n) {// 确定dp数组,数组的下标表示的是机器人所在的网格位置,数组的值是到达当前位置的方法数int[][] dp = new int[m][n];// 此外关于递推方程,其实上一个状态到下个状态之间如何进行转换是真的关键;昨天的最小cost爬楼梯是兼顾考虑cost值,所以转换需要加上cost,而简单的爬楼梯以及现在的机器人行走都是可以继承上一状态,因此没有转换的动作,所以需要加上什么,但是求取总的方法数量的要求使我们明确应该将所有的来源都进行总结求和// dp[i][j] = dp[i-1][j] + dp[i][j-1];// 由递推方程进行初始化,个人认为递推方程中自变量i所有无法满足进入递推方程的值都是初始化需要完成的内容Arrays.fill(dp[0], 1);for(int i=0; i<m; i++)dp[i][0] = 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];}
}

完成这道题之后,动态规划接触的第一个类型可以归纳为总数题,即计算到达某地的总的方法数,对于该类题目其状态转移没有额外需要相加的内容,也不是对于多个维度,多出来源去max或取min,而仅仅是将所有的来源都相加在一起作为当前位置的dp数组值即可;可能会存在的变化的就是有时候题目会增加条件,那么数组何时相加需要严格按照条件来,但是相加的操作始终不变。

另外针对动态规划的五步曲,个人认为还有这些细节需要补充:

  • 声明定义dp数组,dp数组的类型与题目的返回类型保持一致,dp数组的维度与题目给的参照维度保持一致,如果是图表或者网格题,那么dp的维度以及长度与图表和网格保持一致;其次思考数组下标的含义;然后思考数组每个位置上值的含义;
  • 基于数组下标含义及值的含义,拟定递推方程,没有什么特定的套路可以总结,唯独多刷题找感觉,但是有一点是,给出的参照量与递推方程中的状态转移非常的相关,需要思考是否需要加上参考量(昨天与今天做的总数题都没有状态转移的额外元素加入操作,但是昨天的最小代价题cost就是额外的参照量,需要思考从当前状态到下一状态这个cost要怎么用,使用前一状态下标对应的cost还是当前下标对应的cost,这些细节非常重要。所以状态转移一定要联系数组值含义、下标含义一同思索)
  • 初始化,再思索出递推方程后,初始化就是为递推方程中不满足条件的自变量取值进行赋值操作,如dp[i]=……,i>0,那么i=0的dp所有元素就要进行初始化,这是我目前为止对于初始化的理解;然后初始化的值具体给多少一定要结合题意来给出
  • 开始递推
  • 如果不正确,打印dp,若与设想的一致,那么返回第二点;如果不一致,那么返回第四点;

63. 不同的路径||

思路:与不同的路径一样的思路,只不过增加了些条件,需要进行判断,这影响了初始化,以及dp遍历时的赋值,本题关键的地方在于初始化,一行或一列上如果存在障碍物,那么之后的位置就都不可以达到了,在初始化的时候一定要当作当前m或者n就是等于1来进行模拟与赋值。

// 时间复杂度O(m*n)
// 空间复杂度O(m*n)class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {// 离谱的特殊情况,直接障碍物放在起点了,但是已经没有必要了,原先出错是因为没有考虑到障碍物对于第一行与第一列遍历时的影响,现在已经在初始化操作上做出了应对if(obstacleGrid[0][0] == 1)return 0;int m = obstacleGrid.length;int n = obstacleGrid[0].length;// 确定dp数组,数组的下标表示访问到的位置,数组的值表示到达该位置的方法总数int[][] dp = new int[m][n];// 递推方程不变  dp[i][j] = dp[i-1][j] + dp[i][j-1];// 初始化 是处理i=0 和 j=0 的所有内容,但是需要特别注意的是,但一行一列上存在一个障碍物,那么后续的地方肯定就无法到达了,所以dp值是0,可以到达的地方是1for(int i=0; i<m; i++)if(obstacleGrid[i][0] == 0)dp[i][0] = 1;elsebreak;for(int j=0; j<n; j++)if(obstacleGrid[0][j] == 0)dp[0][j] = 1;elsebreak;// 开始递推,递推方程照用,也就增加了一个判断条件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];elsedp[i][j] = 0;}}return dp[m-1][n-1];}
}

 

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

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

相关文章

C++初阶 内存管理和模板

目录 一、new 1.1什么是new&#xff1f; 1.2为什么要有new&#xff1f; 1.3使用new 1.4 new的超级好处 二、delete 2.1什么是delete&#xff1f; 2.2为什么要有delete&#xff1f; 2.3使用delete 三、 malloc / free和new / delete的共同点和区别 四、浅谈模板 4.1什…

【计网·湖科大·思科】实验七 路由信息协议RIP、开放最短路径优先协议OSPF、边界网关协议BGP

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

2024年第四届工业自动化、机器人与控制工程国际会议 | Ei、Scopus双检索

会议简介 Brief Introduction 2024年第四届工业自动化、机器人与控制工程国际会议&#xff08;IARCE 2024&#xff09; 会议时间&#xff1a;2024年7月5 -7日 召开地点&#xff1a;中国成都 大会官网&#xff1a;www.iarce.org 2024年第四届工业自动化、机器人与控制工程国际会…

ffmpeg 时间裁剪之-ss -t与滤镜中trim=start=*:duration=*的区别和联系

背景 工作中遇到的呗。记下来贡着。 滤镜重置时间戳&#xff1a;setptsPTS-STARTPTS 在FFmpeg中&#xff0c;setptsPTS-STARTPTS是一种用于调整视频时间戳&#xff08;PTS&#xff09;的滤镜表达式。这个表达式通常用于视频编辑和处理过程中&#xff0c;用于修改视频的时间轴…

正点原子--STM32定时器学习笔记(2)

书接上文&#xff0c;本篇是对基本定时器实验部分进行的总结~ 实验目标&#xff1a;通过TIM6基本定时器定时500ms&#xff0c;让LED0每隔500ms闪烁。 解决思路&#xff1a;使用定时器6&#xff0c;实现500ms产生一次定时器更新中断&#xff0c;在中断里执行“翻转LED0”。 定时…

2024美赛C题:网球中的动量

解析&#xff1a;https://mp.weixin.qq.com/s/TOPvJ-5pjgsvjvYXt6E9Fg 2023年温网男篮决赛&#xff0c;20岁的西班牙新星卡洛斯阿尔卡拉斯 击败了36岁的诺瓦克德约科维奇。这场失利是德约科维奇自2013年以来首次在温布尔登输球 并结束了大满贯历史上最伟大的球员之一的非凡表现…

排序(6)——冒泡排序、计数排序

七、冒泡排序 1.简介 冒泡排序可以说是我们的老朋友了&#xff0c;是一种很简单的排序方法。冒泡就是泡泡在水中向上漂&#xff0c;很形象的名字和贴合它的思路&#xff0c;通过一趟趟的冒泡每一次将最大的元素冒到最后的位置处&#xff0c;这样就完成了数据的排序。 2.思路与…

开源软件的影响力

开源软件对现代信息技术产业产生了深远的影响。以下是开源软件的一些主要影响&#xff1a; 降低成本&#xff1a;开源软件允许个人和企业无需支付高额授权费即可获取高质量的软件&#xff0c;从而显著降低软件采购和使用的成本。1 提高效率&#xff1a;由于开源软件由全球开…

Spark 的Driver程序中定义的外部变量或连接为什么不能在各种算在中直接用,如果要要如何做?

在Driver程序中定义的外部变量或连接不能在算子中直接使用&#xff0c;因为它们不会被序列化并发送到各个Executor。如果需要在算子使用外部资源&#xff0c;应该在算子内部初始化这些资源。 例如&#xff0c;将RDD数据写入数据库可以这样实现&#xff1a; rdd.foreach(recor…

基于YOLOv8的船舶目标检测系统(Python源码+Pyqt6界面+数据集)

博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff09;YOLOv5、v7、v8优化创新&#xff0c;轻松涨点和模型轻量化&#xff1b;2&#xff09;目标检测、语义分割、OCR、分类等技术孵化&#xff0c;赋能智能制造&#xff0c;工业项目落地经验丰富&#xff1b; …

项目02《游戏-04-开发》Unity3D

基于 项目02《游戏-03-开发》Unity3D &#xff0c; 因前三集资源以及代码冗余问题&#xff0c;本次项目对前三集进行了重做&#xff0c;资源及代码如下&#xff0c; 首先导入场景及人物资源&#xff0c; 为人物添加动画控制器Animator组件&#xff0c; 创建动画控…

人工智能基础-matplotlib基础

绘制图形 import numpy as np x np.linspace(0, 10, 100) y np.sin(x) import matplotlib as mpl import matplotlib.pyplot as plt plt.plot(x, y) plt.show()绘制多条曲线 siny y.copy() cosy np.cos(x) plt.plot(x, siny) plt.plot(x, cosy) plt.show()设置线条颜色 …

Jasperreport 生成 PDF之省纸模式

省纸模式顾名思义就是节省纸张&#xff0c;使用 Jasper 去生成 PDF 的时候如果进行分组打印的时候&#xff0c;一页 A4 纸只会打印一组数据。这种情况下&#xff0c;如果每组数据特别少&#xff0c;只有几行&#xff0c;一页 A4 纸张根本用不了&#xff0c;就会另起一页继续打印…

【傻瓜式教程】docker运行facechain

首选&#xff0c;为了防止后期docker满&#xff0c;Docker容器 - 启动报错&#xff1a;No space left on device&#xff0c;更换一下docker存储位置 1、停止Docker服务 首先停止Docker守护进程&#xff0c;可以使用以下命令&#xff1a; sudo systemctl stop docker 备份现有…

旧衣物回收小程序开发,互联网模式下的营收有多大?

在当下快节奏的生活中&#xff0c;人们不仅生活水平在提高&#xff0c;消费水平也在逐渐提高&#xff0c;从而导致了闲置衣物的增加。为了减少浪费&#xff0c;旧衣服回收行业受到了大众的广泛关注&#xff0c;成为循环利用的一大方式。 当然&#xff0c;在当下网络时代&#…

时间复杂度为 O(n) 的排序算法

大家好&#xff0c;我是 方圆。本文介绍线性排序&#xff0c;即时间复杂度为 O(n) 的排序算法&#xff0c;包括桶排序&#xff0c;计数排序和基数排序&#xff0c;它们都不是基于比较的排序算法&#xff0c;大家重点关注一下这些算法的适用场景。 桶排序 桶排序是分治策略的一…

kingbase控制文件重建

背景&#xff1a; 测试版本&#xff1a;V008R006C005B0023 sys_control文件在数据目录的global下 若sys_control文件损坏或被删&#xff0c;会导致库无法启动 处理方式&#xff1a; 所在目录为数据目录 1、尝试dryrun touch global/sys_control sys_resetwal -l 00000001…

vue基本理解

1、js闭包&#xff0c;作用&#xff1f;&#xff1f; 闭包是指在一个函数内部&#xff0c;可以访问外部函数的变量&#xff0c;即使外部函数已经执行完毕。闭包的作用有&#xff1a; 保护变量&#xff1a;闭包可以保护函数内部的变量&#xff0c;使其不受外部环境的影响。实现…

100 个 NLP 面试问题

100 个 NLP 面试问题 一、 说明 对于技术磨练中&#xff0c;其中一项很酷的技能培训是提问。不知道答案并没有多大的错;错就错在不谷歌这些疑问。本篇就是在面试之前&#xff0c;您将此文档复制给自己&#xff0c;做一个系统的模拟实战。 二、经典NLP问题&#xff08;共8题&a…

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

确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 62.不同路径 代码随想录 视频讲解&#xff1a;动态规划中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路径_哔哩哔哩_bilibili class Solut…