[LeetCode] 77. 组合

题目描述:

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

提示:

  • 1 <= n <= 20
  • 1 <= k <= n

题目链接:

. - 力扣(LeetCode)

解题主要思路:

很简单的一道dfs,确定要递归结速条件,是否需要剪枝,什么时候进行递归,如何回溯即可。

解题代码:

cpp 复制代码
class Solution {
public:
    vector<vector<int>> ret;
    vector<int> path;
    int n, k;
    vector<vector<int>> combine(int _n, int _k) {
        n = _n, k = _k;
        dfs(1);
        return ret;
    }
    void dfs(int pos)
    {   
        // 结速条件
        if (path.size() == k) {
            ret.push_back(path);
            return;
        }

        for (int i = pos; i <= n; ++i) {
            path.push_back(i);  
            dfs(i+1);  // 递归
            path.pop_back();  // 回溯
        }
    }
};
相关推荐
2601_9622186116 分钟前
深入理解C++中的thread_local线程局部变量的应用
开发语言·c++
无名猿21 分钟前
C++ lambda 捕获列表详解:值捕获、引用捕获、初始化捕获与悬垂引用
c++·现代c++·语法基础·踩坑记录
tangguofeng1 小时前
基于分治策略的循环赛日程表问题的思路讲解
算法
hnjzsyjyj1 小时前
洛谷 P1339:[USACO09OCT] Heat Wave G ← Bellman-Ford 算法
数据结构·bellman-ford 算法
起个名字费劲死了1 小时前
VisionMaster集成深度学习算法(基础狗)
人工智能·深度学习·算法
lengxuenong1 小时前
枚举例题分析
c++·算法·青少年编程
繁华的地方不一定留下你的脚印2 小时前
C++线程如何安全停止与唤醒:std::jthread、stop_token与condition_variable
开发语言·c++
Navigator_Z2 小时前
LeetCode //C - 1269. Number of Ways to Stay in the Same Place After Some Steps
c语言·算法·leetcode
2601_965742222 小时前
短视频脚本创作方法分享:本地生活类账号的起步思路
大数据·人工智能·算法·ai·新媒体运营·生活
55873生态系统手记2 小时前
读完 55873 资产钱包的技术栈,我重新理解了 "合规钱包" 应该长什么样
算法·架构