前言:
最近把动态规划系统的刷了一遍,具体题目分为 基础题、0-1背包问题、完全背包问题、买股票最佳时机、打家劫舍、递增子序列、回文子串、编辑距离等几大类。所有题目均来源 LeetCode,刷题思路来自Carl 学长
Carl 学长的题解思路非常清晰,但是在学习的过程中,对题目我也有自己的一些心得与理解,随记录为此专栏。
动态规划个人理解:
所谓动态规划,在我看来就是牺牲空间复杂度换取时间复杂度,某一范围的解可由上一范围的解推导而得到的一种解题方法。具体实现过程可大概分为以下几步:
- dp 数组如何定义,dp 数组的含义
- dp 数组有几种状态,状态如何转移,即如何写出状态转移方程
- 状态转移方程定义好了,如何初始化
- 一切准备就绪,如何遍历,遍历方向是怎样的
在我看来,动态规划类问题看似有其套路,其实则不然。对每个问题只是有一个大概的思考思路,但是具体如何定义dp 数组含义,如何遍历,如何写出状态转移方程这些都没什么固定套路,需要我们自己去思考。
碎碎念:
以前经常看刷题策略说,要系统刷题,分类去刷。我之前一直是分散着刷的,但是尝试了分类刷之后,也并没有觉得有多大进步,确实相较于之前,对某一类题有了个大致的理解,但是要说进步也确实谈不上,不过任何一点点小小的跨越,都需要漫长的时间积累,加油吧,少年!