C++ 递归

C++ 递归,第1张

LK.77 组合:

给定两个整数 nk,返回范围[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] ]

vector temp;
vector> ans;

void dfs(int cur, int n, int k) {
    // 剪枝:temp 长度加上区间 [cur, n] 的长度小于 k,不可能构造出长度为 k 的 temp
    if (temp.size() + (n - cur + 1) < k) {
        return;
    }
    // 记录合法的答案
    if (temp.size() == k) {
        ans.push_back(temp);
        return;
    }
    // 考虑选择当前位置
    temp.push_back(cur);
    dfs(cur + 1, n, k);
    temp.pop_back();
    // 考虑不选择当前位置
    dfs(cur + 1, n, k);
}

vector> combine(int n, int k) {
    dfs(1, n, k);
    return ans;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1354204.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-14
下一篇2022-06-14

发表评论

登录后才能评论

评论列表(0条)

    保存