LeetCode 62 比动态规划更好的做法

动态时间规整—DTW算法 简述 Dynamic Time Warping(DTW)诞生有一定的历史了(日本学者Itakura提出),它出现的目的也比较单纯,是一种衡量两个长度不同的时间序列的相似度的方法。应用也比较广,主要是在模板匹配中,比如说用在孤立词语音识别(识别两段语音是否表示同一个单词),手势识别,数据挖掘和信息检索等中。 孤立词识别操作步骤 基本原理: 问题描述 在大部分的学科中,时间序列是数... 阅读详情

今天是LeetCode专题第36篇文章,我们一起来看下LeetCode的62题,Unique Paths。

题意

其实这是一道老掉牙的题目了,我在高中信息竞赛的选拔考试上就见过这题。可想而知它有多古老,或者说多经典吧。一般来说能够流传几十年的算法题,一定是经典中的经典。下面我们就来看下它的题意。

这题的题意很简单,给定一个矩形的迷宫,左上角有一个机器人,右下角是目的地。这个机器人只能向下走或者是向右走,请问这个机器人走到目的地的路径一共有多少种?

这题很良心地给定了条件,矩形的长和宽都不超过100.

样例

Input: m = 3, n = 2
Output: 3
Explanation:
From the top-left corner, there are a total of 3 ways to reach the bottom-right corner:
1. Right -> Right -> Down
2. Right -> Down -> Right
3. Down -> Right -> Right
Input: m = 7, n = 3
Output: 28

解法

在我写题解的时候,我突然想起来上一次见到它好像是在某个综艺节目当中。它被作为一道智力题来考一些明星嘉宾,好像一众明星里面,只有关晓彤做了出来。。。

它作为智力题有一个标准的模板式解法:

对于图中的C点来说,从起点通往它的路径数量等于通往A点和B点路径的和。

这个结论我们很多人都知道,因为C点只有两个来源,一个是A点一个是B点。它既可以从A点来,也可以从B点来,所以应该是一个加和的关系。

这当然是没错的,但不知道大家从这个过程当中有没有什么感悟。C点的上游是A点和B点,也就是说C状态是由A状态或者是B状态转移到的。这不就是一个动态规划算法吗?

我们用dp记录每一个位置的答案的话,那么可以很轻松地写出状态转移方程:

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

我们用代码把这个方程实现就能解出问题了。

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        dp = [[0 for _ in range(n+2)] for _ in range(m+2)]
        
        dp
动态规划与维特比算法 关键字:动态规划 维特比算法 阅读详情

相关推荐

3D医学影像开发入门<一>:VS2019+DCMTK3.6.8编译及环境配置

3D医学影像开发入门:VS2019+DCMTK3.6.8编译及环境配置

欧特GO 1273

01背包问题的三种求解方法——动态规划、回溯法、分支限界法的具体思路介绍及对比

具体地介绍了01背包的三种求解方法并且进行对比,附有详细代码和测试样例

m0_57736712的博客 2万+

(第14天)Veritas NetBackup(NBU) 配合 RMAN 脚本备份 Oracle 数据库

NBU(Veritas Netbackup)是企业中比较常用的备份软件,通常用于备份企业使用中的系统,数据库,文件等等,通常是搭配 Oracle RMAN 来进行备份 Oracle 数据库。

LuciferLiu_DBA 1611

POJ2559 Largest Rectangle in a Histogram(比动态规划更快的方法——单调队列)

Largest Rectangle in a Histogram Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total Submission(s) : 123   Accepted Submission(s) : 25 Problem Description A his

CNFINITE的博客 404

动态规划和贪心算法

动态规划问题的第二个性质是子问题空间必须足够“小”,也就是说,问题的递归算法会求解相同的子问题,而不是一直生成新的子问题(分治法求解的问题在每一步递归都生成全新的子问题),由于子问题的求解依赖于更小的子问题的求解,我们将子问题的规模按大小排序,按由小至大的顺序进行求解,这样在求解某一个子问题时会依赖于上一个求解的子问题。两个问题都用到了子问题,而最长简单子路径的子问题是相关的,而最短路径的子问题是无关的,这里无关是指:同一个原问题的一个子问题不影响另一个子问题的解。

dzy521的博客 1万+

五大经典算法(贪婪、动态规划、分治、回溯、分支限界法)及其联系和比较

一、贪心法 贪心算法的定义: 贪心算法(也叫贪婪算法)是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到全局最优解,得到的是局部最优解,关键是贪心策略的选择,不同的贪婪策略会导致得到差异非常大的结果。选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。 解题的一般...

vivian_ll的博客 2万+

算法高级(28)-递归、分治、动态规划、贪心、回溯、分支限界几大相似算法比较

在学习算法的过程中,递归、分治、动态规划、贪心、回溯、分支限界这些算法有些类似,都是为了解决大问题,都是把大问题拆分成小问题来解决,但她们之间还是有一些不同之处的,我来给同学们整理一下。 一、算法思想 1.递归算法(recursion algorithm) 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:...

十步杀一人-千里不留行 3635

[动态规划]Leetcode62.不同路径1(python)

[动态规划]Leetcode62.不同路径1 如果读者对于动态规划思路解法还不是很了解,可以先点击链接查阅我之前的一篇博文《算法之【动态规划】详解》,很详细的介绍了动态规划求解思路及方法,有利于你更好的学习动态规划。 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 示例1 输入: m = 3, n = 2 输出:

阿旭的博客 516

leetcode 62

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径?(leetcode 62题) 方法1: 暴力超时 int ans = 0; public int uniquePaths(int m, int n) { ...

Zane.J 244

算法-LeetCode62. 不同路径(动态规划;滚动数组)

62. 不同路径 - 力扣(LeetCode) 发布:2021年9月23日22:06:07 问题描述及示例 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1: 输入:m = 3, n = 7 输出:28 示例 2: 输入:m = 3, n = 2 输出:3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。 向

赖念安的博客 599

力扣热题 100:多维动态规划专题经典题解析

以上就是力扣热题 100 中与多维动态规划相关的经典题目的详细解析,希望对大家有所帮助。在力扣(LeetCode)平台上,多维动态规划相关的题目是算法面试和练习中的重要部分。今天,我们就来详细解析多维动态规划专题中的几道经典题目,帮助大家更好地理解解题思路和技巧。一个机器人位于一个 m x n 网格的左上角,只能向下或向右移动,求到达右下角的不同路径数。,其中每个单元格包含一个非负整数,求从左上角到右下角的最小路径和。这道题主要考察二维动态规划的应用。,求它们的最长公共子序列的长度。

m0_72686196的博客 1483

LeetCode62 不同路径

LeetCode62 不同路径题目解题解题一:动态规划解题二:组合数学解题三:记忆化搜索 题目 解题 与 LeetCode64 最小路径和 类似。 解题一:动态规划 // javascript var uniquePaths = function(m, n) { // 所有元素初始化为 1,可以省去被注释的代码 const dp = new Array(m).fill(1).map(() => new Array(n).fill(1)); //for (let i = 0; i

136

LeetCode62

有个问题怎么也想不通,一下午时间快过去了依旧毫无进展,是时候换换心情刷个题提提神了。。打开LeetCode随机点了个62题,题目如下:机器人位于一个 m x n 网格的左上角, 在下图中标记为“Start” (开始)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,在下图中标记为“Finish”(结束)。问有多少条不同的路径?例如,上图是一个3 x 7网格。有多少可能的路径?注意:...

u014627099的博客 868

lc62.不同路径/ lc63.不同路径Ⅱ(记忆化DFS、二维动态规划

今天leetcode日常打卡,题目是leetcode63.不同路径Ⅱ。考虑到这道题是62.不同路径 的进阶版,就先把62做了,再做的63。特此记录做这两道题的过程和一些自己的做题总结。 62.不同路径 其实,第一眼看到这个想到的就是DFS,因为这道题每一步(机器人移动)都需要做出选择,每做出一次选择有一个分支。如果做出选择A,得到结果不是我想要的,那么我就返回到做出选择A之前的那个时间点。做出另一个选择B,看是否能得到我想要的结果。如同走迷宫一样,能走通,就继续走,走不通就要原路返回,再走另外一条路。

Lu_www的博客 493

leetcode动态规划入门系列总结

最近LeetCode动态规划21天入门系列的学习计划,经历了一个从自闭到自闭的过程,但不管怎么说,还是及时做个笔记总结一下吧,「动态规划」 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 首先讲讲自己做动态规划题的感悟。感觉动态规划的题就是有点抽象,有一些比较直观的,没接触过也能大致推导出转移方程,不直观的那种基本上只能记住套路,如果你想试图证明其合理性也不是不行,就是非常非常难。而且找状态的时候是需要经验的,有时候需要猜,设置的状态到底合不合理,遍历顺序是否是对的等等,感觉差不多

qq_42987967的博客 609

LeetCode HOT100刷题笔记(十六):多维动态规划

ps:笔记和代码按本人理解整理,重思路

学习记录 1148

最大子段和问题 蛮力法、分治法和动态规划效率比较(C++实现)

进行比较的代码如下,其中分别给出了用蛮力法、分治法和动态规划法求解最大子段和问题的函数: #include<iostream> #include<ctime> using namespace std; const int length = 1000; //用于求三个数中最大值的辅助函数,由于内容少,定义为内联函数以提高效率 inline int max(const int& x1, const int& x2, const int& x3) { if (

hanmo22357的博客 3868

(转)动态规划和贪心算法的区别

(转自)http://hi.baidu.com/35661327/blog/item/d5463e17f1e8d011972b439c.html 动态规划和贪心算法的区别 2009-07-27 13:18 动态规划和贪心算法的区别动态规划和贪心算法都是一种递推算法均有局部最优解来推导全局最优解不同点:贪心算...

dianyin8310的博客 1837

学习ing

ghostriderk的专栏 1184

在vscode中配置LeetCode插件,从此愉快地刷题

大家好,今早在B站看到up主的vscode里藏了leetcode插件,这才知道原来还有这款神器。但是没想到在用的时候遇到了一些麻烦,花了一点时间才解决。所以写这篇文章除了给大家安利这个好用的插件之外,也是为了帮助更多的同学避免踩坑。 简介vscode vscode在工业界鼎鼎大名,被誉为微软少有的拿得出手的精品(逃)。原本是不想过多赘述的,但是鉴于许多粉丝还是正在上学的萌新,所以花点笔墨简单介绍一...

TechFlow的博客 8217

wedo2.0(官方搭建手册27节)_带搭建教程和程序

第1课 发光的蜗牛.pdf 第2课 冷风扇.pdf 第3课 移动卫星.pdf 第4课 间谍机器人.pdf第5课 米洛科学漫游者.pdf 第5课米洛科学漫游者B.pdf 第5课米洛科学漫游者c.pdf第5课 米洛科学漫游者d.pdf 第6课 报警装置.pdf第7课科迪倾斜传感器.pdf第 7课科迪运动传感器.pdf 第8课曲柄.pdf 第9课驾驶.pdf 第10课 地震.pdf 第11课 地震柔性.pdf 第12课开闸.pdf 第13课花.pdf 第14课抓取.pdf 第15课直升机.pdf 第16课游戏杆.pdf 第17第.pdf 18第.pdf 19第.pdf课 开闸剩下的省略

上一篇: 不仅硬核游戏会坑人,来看看LeetCode出题人是怎么埋坑的
下一篇: 手把手教你学Numpy,从此处理数据不再慌「一」
TechFlow
博客等级 码龄7年 345粉丝 276原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值