回溯法

概念

回溯法是一种探索所有潜在可能性找到解决方案的算法。如果当前方案不是正确的解决方案,或者不是最后一个正确的解决方案,则回溯法通过修改上一步的值继续寻找解决方案。

应用场景

排列组合、子集

算法思想

解决一个回溯问题,实际上就是一个决策树的遍历过程。
1、路径:也就是已经做出的选择。
2、选择列表:也就是你当前可以做的选择。
3、结束条件:也就是到达决策树底层,无法再做选择的条件。

算法模版

result = []
function backtrack (路径, 选择列表) {
    if (满足结束条件) {
        result.add(路径)
        return
    }
    for (选择 in 选择列表) {
        做选择
        backtrack(路径, 选择列表)
        撤销选择
    }
}

其核心就是 for 循环里面的递归,在递归调用之前「做选择」,在递归调用之后「撤销选择」

相关算法题

中等-子集
中等-子集 II
中等-全排列
中等-全排列 II
https://leetcode-cn.com/problems/combination-sum/submissions/

参考

回溯算法解题套路框架

posted @ 2020-09-06 12:52  fanlinqiang  阅读(250)  评论(0)    收藏  举报