首页 📐算法 回溯
文章
取消

📐算法 回溯

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.相关题目📝

17. 电话号码的字母组合

22. 括号生成

39. 组合总和

40. 组合总和 II

46. 全排列

47. 全排列 II

51. N 皇后

52 N皇后 II

77. 组合

78. 子集

79. 单词搜索

89. 格雷编码

90. 子集 II

93. 复原 IP 地址

95. 不同的二叉搜索树 II

113. 路径总和 II

301. 删除无效的括号

494. 目标和

剑指 Offer 12. 矩阵中的路径

剑指 Offer 34. 二叉树中和为某一值的路径

剑指 Offer 38. 字符串的排列

剑指 Offer II 085. 生成匹配的括号

面试题 08.12. 八皇后

本文由作者按照 CC BY 4.0 进行授权

📐算法 滑动窗口

📐算法 深度优先遍历