代码随想录算法训练营第二十四天|理论基础,77. 组合

( ͡• ͜ʖ ͡• )

目录

理论基础 

77. 组合  


理论基础 

其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。

了解了回溯法的基本知识,初步了解了适用的题目,它的模型算法框架如下:

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

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

77. 组合  

对着 在 回溯算法理论基础 给出的 代码模板,来做本题组合问题,大家就会发现 写回溯算法套路。

在回溯算法解决实际问题的过程中,大家会有各种疑问,先看视频介绍,基本可以解决大家的疑惑。

本题关于剪枝操作是大家要理解的重点,因为后面很多回溯算法解决的题目,都是这个剪枝套路。 

题目链接/文章讲解:代码随想录

视频讲解:带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili

剪枝操作:带你学透回溯算法-组合问题的剪枝操作(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili

题目:

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

示例 1:

输入:n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

示例 2:

输入:n = 1, k = 1
输出:[[1]]

思路:

如果采用暴力写法,难免会陷入需要嵌套k层for循环之类的问题,所以用回溯法递归来解决嵌套层数的问题

递归来做层叠嵌套,每一次的递归中嵌套一个for循环,那么递归就可以用于解决多层嵌套循环的问题了

具体代码如下:

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(int n, int k, int startIndex) {
        if (path.size() == k) {
            result.push_back(path);
            return;
        }
        for (int i = startIndex; i <= n; i++) {
            path.push_back(i);
            backtracking(n, k, i + 1);
            path.pop_back();
        }
    }
public:
    vector<vector<int>> combine(int n, int k) {
        backtracking(n, k, 1);
        return result;
    }
};

最近更新

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

    2024-02-23 08:38:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-23 08:38:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-23 08:38:01       82 阅读
  4. Python语言-面向对象

    2024-02-23 08:38:01       91 阅读

热门阅读

  1. haproxy集成国密ssl功能

    2024-02-23 08:38:01       58 阅读
  2. vivado RAM Inference

    2024-02-23 08:38:01       42 阅读
  3. nifi连接Sql server数据库报错TLS问题

    2024-02-23 08:38:01       55 阅读
  4. C++程序设计学习笔记(二)

    2024-02-23 08:38:01       51 阅读
  5. Go 语言一些常用语法编写和优化指南

    2024-02-23 08:38:01       51 阅读
  6. 力扣(leetcode)第455题分发饼干(Python)

    2024-02-23 08:38:01       50 阅读
  7. 嵌入式系统发展前景?

    2024-02-23 08:38:01       47 阅读
  8. mxonline安装总结

    2024-02-23 08:38:01       56 阅读
  9. Vue3学习——hooks

    2024-02-23 08:38:01       54 阅读