【练习】【回溯No.1】力扣 77. 组合

题目

  1. 组合

给定两个整数 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]]

来源:力扣 77. 组合


思路(注意事项)

回溯模板

c 复制代码
void backtracking(参数) {
	 if (终⽌条件) {
		 存放结果;
		 return;
	 }
for (选择:本层集合中元素(树中节点孩⼦的数量就是集合的⼤⼩)) {
	 处理节点;
	 backtracking(路径,选择列表); // 递归
	 回溯,撤销处理结果
}

纯代码

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

题解(加注释)

c 复制代码
class Solution {
private:
    vector<vector<int>> ans;  // 存储所有组合的结果
    vector<int> path;         // 存储当前组合的路径

    // 回溯函数
    void backtracking(int n, int k, int start) {
        // 如果当前路径的长度等于 k,说明找到一个有效的组合
        if (path.size() == k) {
            ans.push_back(path);  // 将当前组合加入结果集
            return;
        }

        // 遍历可能的起始位置
        for (int i = start; i <= n + 1 - (k - path.size()); 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);  // 从数字 1 开始回溯
        return ans;             // 返回所有组合
    }
};
相关推荐
智驱力人工智能4 小时前
工厂智慧设备检测:多模态算法提升工业安全阈值
人工智能·算法·安全·边缘计算·智慧工厂·智能巡航·工厂设备检测
茴香豆的茴15 小时前
转码刷 LeetCode 笔记[2]:203. 移除链表元素(python)
笔记·leetcode·链表
R-G-B6 小时前
【15】OpenCV C++实战篇——fitEllipse椭圆拟合、 Ellipse()画椭圆
c++·人工智能·opencv·fitellipse椭圆拟合·ellipse画椭圆·椭圆拟合·绘制椭圆
2501_924731477 小时前
城市路口识别准确率↑31%!陌讯时空建模算法在交通拥堵识别中的突破
人工智能·算法·目标检测·计算机视觉·目标跟踪
熬了夜的程序员7 小时前
【华为机试】208. 实现 Trie (前缀树)
数据结构·算法·华为od·华为
界面开发小八哥8 小时前
MFC扩展库BCGControlBar Pro v36.2:MSAA和CodedUI测试升级
c++·mfc·bcg·界面控件
小O的算法实验室9 小时前
2024年ESWA SCI1区TOP,自适应种群分配和变异选择差分进化算法iDE-APAMS,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
不吃洋葱.10 小时前
左子树之和
算法
金融小师妹11 小时前
基于AI量化模型的比特币周期重构:传统四年规律是否被算法因子打破?
大数据·人工智能·算法
极客BIM工作室11 小时前
C++ 限制类对象数量的技巧与实践
开发语言·javascript·c++