LeetCode动态规划归纳

本文归纳了LeetCode中动态规划题目的解题方法,包括算种数、二维动态规划、局部动态规划、全局动态规划和递归与动态规划等类型,并列举了典型题目进行分析,帮助理解动态规划的思路和技巧。
摘要由CSDN通过智能技术生成

LeetCode动态规划归纳

最近刷了很多动态规划的问题,归纳一下做动态规划的题的方法。

动态规划很多题目是解决最多最少最大最小的问题。

动态规划问题的基本做法是:

  1. 确定递推量
  2. 推出递推式
  3. 确定边界

在解决上述问题的同时,要时刻注意如何把全局的问题变成局部的(最优子结构),如何把前面计算过的子问题利用起来(重叠子问题)。

下面把动态规划题分为几种类型。

算种数的动态规划

典型的题目包括:

62.Unique Paths

63.Unique Paths II

70.Climbing Stairs

91.Decode Ways

95.Unique Binary Search Trees II

这类型的题目主要是算种数,依靠前面算出的种数算后面的种数。第70题Climbing Stairs和91题Decode Ways是利用了斐波那契数列,两道题目非常相似。第95题Unique Binary Search Trees II是卡特兰数的应用。第62题Unique Paths和63题Unique Paths II是两道二维的算种数的问题。

二维动态规划

典型的题目包括:

62.Unique Paths

63.Unique Paths II

64.Minimum Path Sum

72.Edit Distance

97.Interleaving String

这五道题是二维的动态规划,二维动态规划相当于填一张二维的表。经常的做法先填完第一行和第一列,然后其他的几行用一个两次循环,每一个空格通过相邻的左边[i][j-1],上边[i-1][j]或着对角[i-1][j-1]来填完所有项。

局部动态规划

典型的题目包括:

53.Maximum Subarray

152.Maximum Product Subarray

300.Longest Increasing Subsequence

368.Largest Divisible Subset

这类型题目的特点是它最后一个的递推量并不是相应的最优解,而是所有递推量的最大值才是最优解。(当然你也可以设置两个递推量,一个全局的,一个局部的,而这里考虑的递推量是局部的),递推量的特点是一定包括自己,所以是局部的。

全局动态规划

典型的题目包括:

32.Longest Valid Parentheses

198.House Robber

213.House Robber II

这是最普通的动态规划,相对于局部动态规划递推量就是最优解。

递归和动态规划

典型的题目包括:

403.Frog Jump

主要是利用“备忘录”的方法,在递归的基础上将子问题的解记录。普通的动态规划从下往上,递归的动态规划从上往下再从下往上,要注意递推量的确定,递推量必须是唯一。

以上是最近做的一些题目的归纳,后续的题目会继续添加

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值