LeetCode刷题记录----62.不同路径(Medium) - 详解

news/2025/10/2 18:13:56/文章来源:https://www.cnblogs.com/yxysuanfa/p/19123842

2025/9/26

题目(Medium):

62.不同路径(Medium)


我的思路:

模式识别:走到[m-1,n-1]就需要先走到[m-2,n-1]或者[m-1,n-2]的位置,而走到上述两个位置也需要同样往前推导,因此主问题和子问题有相同的结构和状态含义 --> 动态规划

因为是动态规划,所以我们要考虑各个状态以及状态的转移方程

显然需要对每个格子记录状态,所以我们用二维数组:

dp[i, j]:到达[i, j]位置的不同路径数

状态转移方程:dp[i, j] = dp[i-1, j] + dp[i, j-1]        【因为每次从左边或者上边的格子到达[i,j]一定只有一种方法】

初始状态:现在到达第一行或者第一列的格子都一定只有一条路径,所以都初始化为1

具体代码如下:

public class Solution {public int UniquePaths(int m, int n) {//第一行/第一列的格子显然都只有一种方式到达int[,] dp = new int[m, n];for(int j = 0; j < n; j++)dp[0, j] = 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];}
}

时间复杂度:O(MN)

空间复杂度:O(MN)


优化思路:

1.压缩为一维动态规划

在上面的转移方程:dp[i, j] = dp[i-1, j] + dp[i, j-1] 中,我们可以看出来当前第 i 行,第j列的dp值只和它这一行的j-1列,以及上一行的j列元素有关。

因此我们可以考虑把他压缩为一维的,这样每次在计算新dp[j]的时候,都是计算最新一行的dp[j]值,同时对于还没计算的位置相当于保留了上一行的dp[j]的值

新转移方程:dp[j] = dp[j] + d[j-1] 

初始化:全部为1,因为第一行全部为1

翻译:当前行的dp[j] = 上一行的dp[j] + 当前行的dp[j-1]

具体代码如下:

public class Solution {public int UniquePaths(int m, int n) {//第一行/第一列的格子显然都只有一种方式到达int[] dp = new int[n];Array.Fill(dp, 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];dp[j] += dp[j-1];       //可以压缩为一维的,因为可以看到每一行的状态只与这一行以及她的上一行有关}}return dp[n-1];}
}

时间复杂度:O(MN)

空间复杂度:O(N)

2.组合数

我们还可以通过数学原理 ,要到达m行,n列的位置,一共需要移动的次数为m+n-2次 。其中需要向下移动的次数是m-1次,而题目要求的相当于就是在这m+n -2次中,选取m-1种不同的下移方案。

因此可以用该组合数公式来进行计算(公式图片来自于LeetCode官方题解)

其中我们通过这里来下手,进行累乘计算(下面展示部分累乘过程)

 n/1 ,(n /1) * (n+1/2),(n/1) * (n+1/2) * (n+2/3) ...以此类推到最终答案值

因此我们可以用变量 x表示范围n ~ n + m -2 的分子,用变量y 表示范围1 ~ m-1的分母

具体代码如下:

public class Solution {public int UniquePaths(int m, int n) {//还可以计算组合数//一共要移动m+n-2次,其中存在m-1种往下移动的次数long ans = 1;long x, y;for(x = n, y = 1; y < m; x++, y++){ans = ans * x/ y;       //存在一个推导公式}return (int)ans;}
}

时间复杂度:O(M)

空间复杂度:O(1)

注意:这里累乘的计算过程种有可能会出现超过int的上限的数字,所以用long来存储

这个来自LeetCode的一个评论区的补充解释,忘记了可以回来看一眼


总结:

①对于路径数总和问题,如果存在确定的移动规则,那我们可以很简单地通过动态规划来解决。

②当状态转移方程种发现当前这一行的状态可以仅由当前行的状态和上一行的状态得到的时候,可以考虑压缩为一维动态规划

③你永远可以相信数学原理的力量

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

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

相关文章

python基础——正则表达式 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

机器学习15:自监督式学习(Self-Supervised Learning)① - 实践

机器学习15:自监督式学习(Self-Supervised Learning)① - 实践2025-10-02 18:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !impo…

长沙旅游网站开发旅游网站的建设背景

ChatGPT4和Gemini Ultra被Claude 3 AI模型超越了&#xff1f; 3月4日周一&#xff0c;人工智能公司Anthropic推出了Claude 3系列AI模型和新型聊天机器人&#xff0c;其中包括Opus、Sonnet和Haiku三种模型&#xff0c;该公司声称&#xff0c;这是迄今为止它们开发的最快速、最强…

2025担保合同律师事务所推荐,专业团队高效解决法律难题!

2025担保合同律师事务所推荐,专业团队高效解决法律难题!在当今复杂的经济环境中,担保合同作为金融交易和商业合作中的重要法律工具,其纠纷和风险也日益增多。根据行业数据显示,近年来担保合同相关案件的年增长率保…

「补充篇」在Cloudflare上设置并更新SRV记录

「补充篇」在Cloudflare上设置并更新SRV记录索引 │ ├─关于本教程 ├─创建SRV记录 ├─获取DNS更新令牌 ├─获取区域ID ├─获取DNS记录ID ├─更新SRV记录 └─结尾关于本教程 在之前的教程中我们已经介绍了使用…

10.1 CSP模拟26 改题记录

HZOJ 写在前面 hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh T1几分钟出思路然后在写假的道路上越改越远,T2来不及了乱写,T3猜不到结论,只有T4是合理得分、、、 A. median 题意是给定5个长为…

Spring 核心 - AOP 面向切面编程入门, 通俗易懂

Spring 核心 - AOP 面向切面编程入门, 通俗易懂撰写本文目的只有一个,让你畅快阅读 AOP 知识,并搞定以下几个问题。 AOP 面向切面编程到底是什撰写本文目的只有一个,让你畅快阅读 AOP 知识,并搞定以下几个问题。AO…

2025年筒袋磁力泵实力厂家推荐榜:高效耐用与创新技术深度解

2025年筒袋磁力泵实力厂家推荐榜:高效耐用与创新技术深度解在化工、制药、石油等工业领域,筒袋磁力泵作为一种高效、无泄漏的流体输送设备,正日益成为关键工艺环节的核心装备。其采用磁力耦合驱动技术,彻底解决了传…

2025电源适配器权威推荐榜:高效稳定、安全耐用的优质品牌之

2025电源适配器权威推荐榜:高效稳定、安全耐用的优质品牌之选在当今数字化的时代,各种电子设备充斥着我们的生活和工作,从智能手机、平板电脑到笔记本电脑、智能穿戴设备等,这些设备都离不开电源适配器来提供稳定的…

「LUCKY STUN穿透」IPv4和IPv6分离重定向

「LUCKY STUN穿透」IPv4和IPv6分离重定向关于本教程 在之前的教程中我们已经实现了通过cloudflare的页面规则 以及重定向规则实现实现stun穿透端口的“固定” 使用页面规则:「LUCKY STUN穿透」使用Cloudflare的页面规…

2025航空插头权威推荐榜:M8/m12/公母对接/5芯/五芯/三芯/4芯/3芯/12芯航空插头优质性能与可靠品质的源头厂家之选

行业背景航空插头,作为电子设备中电流、信号连接的关键部件,广泛应用于航空航天、国防、工业自动化、交通运输等众多领域。随着科技的飞速发展,各行业对电子设备的性能和可靠性要求越来越高,这也对航空插头的质量、…

2025经侦律师优质品牌推荐:上海浦信律所专业护航!

2025经侦律师优质品牌推荐:上海浦信律所专业护航!在当今复杂多变的商业环境中,经济犯罪的形式日益多样化和隐蔽化,经侦律师的重要性愈发凸显。他们不仅要具备扎实的法律知识,还要应对各种技术挑战,为客户提供专业…

建筑人才网官方网站评职称wordpress目录结构

php的错误处理是比较复杂的, 本文讲解php中所有错误相关的重要知识点做一次梳理, 便于理解php的错误机制. 基础知识 在此之前, 先熟悉一下php error的基础知识 预定义常量运行时配置异常错误处理函数预定义常量 定义了所有php的错误类型常量, 每一个常量都是一个整型数值, 它的…

制作营销网站公司竞价推广培训

在英语学习中&#xff0c;我们经常遇到一些句子包含两个成分&#xff0c;如“人物”或“宾语补充说明”。这些句子可能是双宾语结构&#xff0c;也可能是宾语补足语结构。虽然两者都出现在动词后&#xff0c;但它们的功能和意义完全不同&#xff0c;本篇文章将会介绍一下小技巧…

实用指南:[Windows] 随手剪-视频合并工具 v0.12多种格式多段视频50多种转场效果

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

欧易-(OKX)交易所注册及KYC认证全流程指南

作为全球领先的加密货币交易平台,欧易(OKX)为用户提供安全便捷的数字资产交易服务。本文将详细介绍OKX的注册流程和KYC认证步骤,帮助您快速完成账户开通。 一、OKX注册流程下载安装OKX APP 您可以通过以下方式获取…

Window配置WSL(Ubuntu)环境

WSL是用于Windows系统之上的Linux子系统。可以在Windows系统中获得Linux系统环境,并完全直连计算机硬件,无需通过虚拟机虚拟硬件。WSL是什么 WSL(Windows Subsystem for Linux)是Win10系统推出的全新功能,让我们可…

最流行的网站设计风格洛阳青峰网络让人去培训

组件库上都有详细的介绍&#xff0c;有自带的一些属性&#xff01;

备案核验单 网站类型wordpress无法上传文件

一、创建Maven项目二、设置SVN信息三、设置构建触发器四、设置Maven命令五、设置构建后发邮件信息&#xff08;参考文章一&#xff09;六、设置构建后拷贝文件到远程机器并执行命令来自为知笔记(Wiz)

使用SVCB/HTTPS记录隐藏和固定Web服务端口

使用SVCB/HTTPS记录隐藏和固定Web服务端口背景 在之前的教程中我们实现了使用 重定向 来 “固定” stun穿透后web服务的端口 其主要的效果是 在访问穿透后的web服务时免除输入端口 这个方法不仅适用于stun穿透 也适合运…