介绍
回溯算法是算法设计中的一种方法。回溯算法是一种渐进式寻找并构建问题解决方式的策略。回溯算法会先从一个可能的动作开始解决问题,如果不行,就回溯并选择另一个动作,直到将问题解决。
就像你在一个迷宫里面遇到了当前有三条岔路,你选择了第一条后发现此路不通,那你是不是要回到原点,进行选择第二条道路,以此类推,最后选择一条正确的道路。
什么问题适合用回溯算法解决?
- 有很多分岔路
- 这些路里面有死路,也有出路
- 通常需要用递归来模拟所有的路
基础案例
场景一
全排列
// 输入
const input = [1, 2, 3]
// 输出
const output = [
[1, 2, 3],
[1, 3, 2],
[2, 1, 3],
[2, 3, 1],
[3, 1, 2],
[3, 2, 1]
]
步骤:
- 用递归模拟所有出路的情况
- 遇到包含重复元素的情况,就回溯
- 收集所有到达递归终点的情况并返回