前言
回溯算法的本质是对树型或者图型结构进行一次深度优先搜索,是一种暴力搜索算法,因此其时间复杂度是较高的,为指数级别。
题目列表
思考与总结
从题目列表来看,几乎所有的回溯算法全部可以用一个树形图来帮助我们设计程序。只有深刻理解如何绘制树形图,才能设计出回溯算法,并做出相应的剪枝操作来提升算法的效率。
代码随想录中总结了一套“回溯三部曲”较为实用,如下:
- 函数参数及返回值
- 终止条件
- 单层循环逻辑
其中还提供了一个回溯算法的代码模板,学习前期可以根据这个模板感受回溯算法的表象,慢慢地再深刻理解其本质,具体内容见参考资料[1]。
根据题目列表,可以将回溯算法简单分为如下几类[1]:
- 组合问题
- 分割问题
- 子集问题
- 排列问题
- 棋盘问题
在排列问题和组合问题中,要深刻理解去重的原理。
参考资料
[1] 代码随想录