【算法刷题day24】回溯算法+简单剪枝

77.组合

文档链接:[代码随想录]

题目链接:77.组合

题目:

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

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

cpp 复制代码
class Solution {
private:
    vector<int> path;
    vector<vector<int>> result;
    void backtracking(int n, int k, int index){
        if(path.size() == k){
            result.push_back(path);
            return ;
        }
        for(int i = index; 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;
    }
};

剪枝

cpp 复制代码
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 - (k - path.size()) + 1; 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;
    }
};
相关推荐
m0_461502693 分钟前
【贪心算法1】
算法·贪心算法
Doopny@19 分钟前
数字组合(信息学奥赛一本通-1291)
数据结构·算法·动态规划
平凡而伟大(心之所向)31 分钟前
机器学习的发展史
机器学习
龚大龙31 分钟前
机器学习(李宏毅)——Domain Adaptation
人工智能·机器学习
AAA顶置摸鱼38 分钟前
机器学习·NLP中的文本分类
机器学习·自然语言处理·分类
AIGC_ZY39 分钟前
扩散模型中三种加入条件的方式:Vanilla Guidance,Classifier Guidance 以及 Classifier-Free Guidance
深度学习·机器学习·计算机视觉
原来是猿1 小时前
蓝桥备赛(13)- 链表和 list(上)
开发语言·数据结构·c++·算法·链表·list
项目申报小狂人1 小时前
高性能算法NGO!北方苍鹰优化算法(Northern Goshawk Optimization,NGO)
算法·数学建模
且听风吟ayan1 小时前
leetcode day26 重复的子字符串
算法·leetcode·c#
仟濹2 小时前
【算法 C/C++】二维差分
c语言·c++·算法