递归(Recursion)
递归是函数直接或间接调用自身来分解子问题的技巧,常与分治、回溯结合;理解基线条件与调用栈是正确使用的前提。
Stanford 课程
何时使用与尾递归
- 什么时候适合使用
- 尾递归会更好么?
通用方法与回溯
动态规划(Dynamic Programming)
在你的面试中或许没有任何动态规划的问题,但能够知道一个题目可以使用动态规划来解决是很重要的。这一部分会有点困难,每个可以用动态规划解决的问题都必须先定义出递推关系,要推导出来可能会有点棘手。我建议先阅读和学习足够多的动态规划的例子,以便对解决 DP 问题的一般模式有个扎实的理解。
视频
- Skiena:CSE373 2020 - 讲座 19 - 动态规划简介(视频)
- Skiena:CSE373 2020 - 讲座 20 - 编辑距离(视频)
- Skiena:CSE373 2020 - 讲座 20 - 编辑距离(续)(视频)
- Skiena:CSE373 2020 - 讲座 21 - 动态规划(视频)
- Skiena:CSE373 2020 - 讲座 22 - 动态规划和复习(视频)
- Simonson:动态规划 0(从 59:18 开始)(视频)
- Simonson:动态规划 I - 第 11 讲(视频)
- Simonson:动态规划 II - 第 12 讲(视频)
- 单独的动态规划问题列表(每个都很短): 动态规划(视频)