回溯法
概念
回溯法是一种探索所有潜在可能性找到解决方案的算法。如果当前方案不是正确的解决方案,或者不是最后一个正确的解决方案,则回溯法通过修改上一步的值继续寻找解决方案。
应用场景
排列组合、子集
算法思想
解决一个回溯问题,实际上就是一个决策树的遍历过程。
1、路径:也就是已经做出的选择。
2、选择列表:也就是你当前可以做的选择。
3、结束条件:也就是到达决策树底层,无法再做选择的条件。
算法模版
result = []
function backtrack (路径, 选择列表) {
if (满足结束条件) {
result.add(路径)
return
}
for (选择 in 选择列表) {
做选择
backtrack(路径, 选择列表)
撤销选择
}
}
其核心就是 for 循环里面的递归,在递归调用之前「做选择」,在递归调用之后「撤销选择」
相关算法题
中等-子集
中等-子集 II
中等-全排列
中等-全排列 II
https://leetcode-cn.com/problems/combination-sum/submissions/

浙公网安备 33010602011771号