回溯法的解体框架是什么呢,解决一个回溯问题,实际上就是一个决策树的遍历过程。一般来说,我们需要解决三个问题: 路径:也就是已经做出的选择。 选择列表:也就是你当前可以做的选择。 结束条件:也就是到达决策树底层,无法再做选择的条件。 我们所使用的框架基本就是: 其中最关键的点就是:在递归之前做选择,在递归之后撤销选择。 LinkedList result = new LinkedList(); public void backtrack(路径,选择列表){ if(满足结束条件){ result.add(结果); } for(选择:选择列表){ 做出选择; backtrack(路径,选择列表); 撤销选择; } }
39.组合总和 40. 组合总和 II 46. 全排列 47. 全排列 II 78. 子集 90. 子集 II 这类题目都是同一类型的,用回溯算法! 其实回溯算法关键在于:不合适就退回上一步 然后通过约束条件, 减少时间复杂度.