陈兰芳 发表于 昨天 10:28

刷题笔记Day22回溯算法part01

刷题笔记Day22:回溯算法part01

回溯算法在之前递归中就有涉及,例如之前的所有可能路径的题目就用到了回溯的思想
回溯出现的位置都是在递归之后,且回溯就是纯的暴力算法。(解决for循环无法暴力破解的方法)
回溯所要解决的问题

[*]组合问题
[*]切割问题
[*]子集问题
[*]排列问题
[*]棋盘问题
回溯问题都可以看成是一个N叉树的问题,下面引用一张代码随想录中的图片便于理解

回溯算法模板框架:
void backtracking(参数) {
    if (终止条件) {
      存放结果;
      return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
      处理节点;
      backtracking(路径,选择列表); // 递归
      回溯,撤销处理结果
    }
}题目:77. 组合

组合
给定两个整数 n 和 k,返回范围 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
思路:可以将整个过程转化为N叉树的模式,横向即为for循环为纵向即为递归逻辑,而终止条件即为我们需要多少层的for循环,在本题中为k个for循环。

代码:如下:
class Solution {public:    vector result;    vectortmp;    void backtracking(int start, int end,int k){      if(k == 0){            result.push_back(tmp);            return;      }      for(int i = start;i
页: [1]
查看完整版本: 刷题笔记Day22回溯算法part01