回溯算法是什么?
回溯算法也是算法设计中的一种方法
回溯算法是一种渐进式寻找并构建问题解决方式的策略 回溯算法会从一个可能的动作开始解决问题,如果不行,就回溯并选择另一个动作,直到将问题解决
什么问题适合用回溯算法解决?
- 有很多路
- 这些路里,有死路,也有出路
- 通常需要递归来模拟所有的路
算法步骤:
- 用递归模拟出所有情况
- 遇到包含重复元素的情况,就回溯
- 收集所有到达终点的情况,并返回
全排列,(力扣46)
输入:[1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
解题思路:
- 要求:所有排列情况,没有重复元素
- 有出路,有死路
- 考虑回溯算法解决
子集,(力扣78)
输入:[1,2,3] 输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]];
解题思路:
- 要求:所有子集,没有重复元素
- 有出路,有死路
- 考虑使用回溯算法
解题步骤:
- 用递归模拟所有的情况
- 保证接的数字都是后面的数字
- 收集所有到达递归终点的情况,并返回