day 24 第七章 回溯算法part01

● 理论基础
本质上还是穷举遍历,伴随着递归

回溯法,一般可以解决如下几种问题:
组合问题:N个数里面按一定规则找出k个数的集合
切割问题:一个字符串按一定规则有几种切割方式
子集问题:一个N个数的集合里有多少符合条件的子集
排列问题:N个数按一定规则全排列,有几种排列方式
棋盘问题:N皇后,解数独等等
● 77. 组合

/*
 * 77. 组合
中等
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
 */

class Solution_77 {
 public:
  /*
   * 回溯
回溯
输入参数为区间的元素
终止条件为单次搜索结果大小大于k
单层回溯逻辑:
    判断终止条件
    先横向遍历取一个值
    纵向遍历取一个值
    回溯()
   */

  void back(int cur, int n, int k, vector<vector<int>> &res, vector<int> &path){
      if(path.size() == k) {
          res.push_back(path);
          return;
      }
      for(int i = cur; i <= n - (k - path.size()) + 1; i++){//剪枝,当剩余元素数量不足以构成k个元素时就不用再搜索了
          path.push_back(i);
          back(i + 1, n, k, res, path);
          path.pop_back();
      }
  }

  vector<vector<int>> combine(int n, int k) {
      vector<vector<int>> res;
      vector<int> path;
      back(1, n, k, res, path);
      return res;
  }
};

相关推荐

  1. day 24 回溯算法part01

    2024-05-10 17:24:03       27 阅读
  2. day 27 回溯算法part03

    2024-05-10 17:24:03       35 阅读
  3. day 28 回溯算法

    2024-05-10 17:24:03       22 阅读
  4. Day25- 回溯算法part05

    2024-05-10 17:24:03       57 阅读
  5. Day 24 回溯算法01

    2024-05-10 17:24:03       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 17:24:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 17:24:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 17:24:03       82 阅读
  4. Python语言-面向对象

    2024-05-10 17:24:03       91 阅读

热门阅读

  1. 【Linux】安装Python3.11报错

    2024-05-10 17:24:03       36 阅读
  2. 5.Git

    5.Git

    2024-05-10 17:24:03      33 阅读
  3. Spring自动装配:解析原理与实践

    2024-05-10 17:24:03       30 阅读
  4. Python编程技巧(下篇)

    2024-05-10 17:24:03       30 阅读
  5. LInux 基础指令

    2024-05-10 17:24:03       27 阅读
  6. 【使用openpyxl对.xlsx文件增删改查】

    2024-05-10 17:24:03       32 阅读
  7. React 第二十三章 shouldComponentUpdate

    2024-05-10 17:24:03       32 阅读