首页 📐算法 回溯
文章
取消

📐算法 回溯

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 进行授权

📐算法 滑动窗口

📐算法 深度优先遍历