1.方法总结💡
1
回溯方法本质是递归 通过对一个数组或字符串 进行逐个组合 得出结果
2.适用题型🎯
1
  类似于"排列组合"/"二维穷举"的题型
3.注意点❗
1
2
3
4
1️⃣.回溯本质是递归-尤其注意递归结束的条件
2️⃣.注意审题 看题目是否能组合/选择重复的值 或者是已经选择过的值
3️⃣.注意 回溯体内的条件 1.开始条件start  2.执行的次数
4️⃣.执行回溯的时候根据题意 选择对参数进行增加或者减少
4.模板🔑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
    List<List<Integer>> res = new ArrayList(); //记录所有的结果
    List<Integer> path = new ArrayList();	   //记录每次回溯的结果
    public List<List<Integer>> Method(int[] nums, int k) {
        backTrace(nums,k,0);//开始进入回溯    backTrace 想象成是行row    里面的for循环是 列 col
        return res;		   //返回结果
    }
    public void backTrace(int nums,int k ,int start){
        if(k==0){//⚠回溯停止的条件
            res.add(new ArrayList(path)); //把每次回溯的结果添加到res集合
            return;//return结束方法
        }
        for(int i=start;i<=n-k+1;++i){    //⚠每次进行的回溯  1.i是开始位置  2,回溯长度  3.自增
            path.add(i);				//结果添加到 path集合
            backTrace(n,k+1,i+1);         //再进回溯(k增加或者减少是根据题目来 i加或者减根据能否取到自身)
            path.remove(path.size()-1);  //把之前添加的 元素 删除
        }
    }
}
5.相关题目📝
 39. 组合总和
 46. 全排列
 51. N 皇后
 77. 组合
 78. 子集
 79. 单词搜索
 89. 格雷编码
 494. 目标和
