回溯算法

212 阅读1分钟

1. 回溯算法可以解决什么问题

1. 组合问题: N个数里面按一定规则找出k个数的集合

2. 切割问题: 一个字符串按一定规则有几种切割方式

3. 子集问题: N个数的集合里有多少符合条件的子集

4. 排列问题: N个数按一定规则全排列,有几种排列方式

5. 棋盘问题:N皇后,解数独

2. 具体刷题记录

回溯算法三部曲:

  1. 确定递归函数参数
  2. 确定终止条件
  3. 单层搜索过程

3. 回溯算法伪代码模板

const function backtracking(参数){
    if(终止条件){
        存放结果;
        return ;
     }
     for(选择:本层集合中元素(树种节点孩子的数量就是集合大小)){
         处理节点;
         backtracking(路径,选择列表);//递归
         回溯,撤销处理结果
     }
}

1. 77. 组合问题 题解

2. 216. 组合总和,相加之和位n的k个数的组合,组合中只允许含有1-9的正整数。题解

3. 17. 电话号码的字母组合 题解