今日收获:回溯理论基础,组合,组合总和Ⅲ,电话号码的字母组合
1. 回溯理论基础
(1)解决问题:暴力穷举所有的可能性,从中找出按一定规则的排列(有序),组合(无序,分割也可以看作组合)或子集。
(2)回溯算法模板
void backtracking(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}
}
2. 组合
思路:终止条件是收集到了足够数量的节点。处理当前节点的for循环(控制选择范围),从当前可以选择的元素开始,到最后一个有可能值的地方停止,处理完叶子节点就返回上一个节点,再向下遍历
方法:
class Solution {
List<Integer> path=new ArrayList<