许多软件工程师在编程面试中遇到递归问题。 如果你想成为善于解决递归问题,学习这6个模板:
1.迭代
任何可以用循环解决的问题也可以用递归解决。
有时候递归提供了一个更简洁和优雅的解决方案,即使效率较低。
范例:
- 按逆序遍历链表
2.子问题
此模式侧重于定义和解决问题的较小版本。
标准的策略是从输入中删除一些内容。
示例如下:
- - 查找字符串是否为回文
- - 找到所有爬楼梯的方法
3.选择
有些问题可以通过以下方式解决:
- ·查找某些输入元素的所有组合
- ·选择与给定条件匹配的组合
范例:
- 找到所有可能的方法来交错2字符串
4.顺序
此模式类似于选择,但元素组合的顺序很重要。
这些问题可以通过以下方式解决:
- ·找到所有的排列
- ·过滤它们
范例:
- 找到所有的N位数的数字总和为一个目标数
5.分而治之
此模式侧重于将问题拆分为多个子问题:
- ·每个子问题单独解决
- ·组合解决方案以获得结果
范例:
- 找到所有的方法来括号一个表达式
6.深度优先搜索
此模式在树或图中查找路径:
- ·从一个节点开始
- ·递归访问每个节点的邻居
- ·避免重复循环
范例:
- 在一个矩阵中从左上角到右下角找出乘积最大的路径
https://www.jdon.com/71731.html