力扣77. 组合

这篇具有很好参考价值的文章主要介绍了力扣77. 组合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

递归

  • 思路:
    • 找到一个长度为 nnn 的序列 aaa 的所有子序列,代码框架:
      • std::vector<int> temp;
        void dfs(int cur, int n) {
            if (cur == n + 1) {
                // 记录答案
                // ...
                return;
            }
            // 考虑选择当前位置
            temp.push_back(cur);
            dfs(cur + 1, n, k);
        
            temp.pop_back();
            // 考虑不选择当前位置
            dfs(cur + 1, n, k);
        }
    • 本题递归结束条件为序列中元素为 k,即:
      •     void dfs(int cur, int n, int k) {
                // 序列元素个数满足条件,存储结果退出
                if (item.size() == k) {
                    result.push_back(item);
                    return;
                }
        
                // 考虑选择当前位置
                item.push_back(cur);
                dfs(cur + 1, n, k);
                item.pop_back();
        
                // 考虑不选择当前位置
                dfs(cur + 1, n, k);
            }
        
        private:
            std::vector<int> item;
            std::vector<std::vector<int>> result;
    • 已经构建的序列S',剩余的数不足以构成满足条件的序列 S:
      • 剩余的数长度 n - (cur - 1)
      • size(S') + (n - (cur - 1)) < size(S) = k
      • 这种情况也需要退出递归
  • 综上,完整代码
class Solution {
public:
    vector<vector<int>> combine(int n, int k) {
        dfs(1, n, k);
        return result;
    }

private:
    void dfs(int cur, int n, int k) {
        if (item.size() + (n -cur + 1) < k) {
            return;
        }

        if (item.size() == k) {
            result.push_back(item);
            return;
        }

        item.push_back(cur);
        dfs(cur + 1, n, k);
        item.pop_back();
        dfs(cur + 1, n, k);
    }

private:
    std::vector<int> item;
    std::vector<std::vector<int>> result;
};

文章来源地址https://www.toymoban.com/news/detail-792254.html

到了这里,关于力扣77. 组合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++力扣题目77--组合

    给定两个整数  n  和  k ,返回范围  [1, n]  中所有可能的  k  个数的组合。 你可以按  任何顺序  返回答案。 示例 1: 示例 2: 提示: 1 = n = 20 1 = k = n 本题是回溯法的经典题目。 直接的解法当然是使用for循环,例如示例中k为2,很容易想到 用两个for循环,这样就可以输

    2024年01月17日
    浏览(31)
  • 力扣--深度优先算法/回溯算法47.全排列 Ⅱ

    思路分析: 使用DFS算法进行全排列,递归地尝试每个可能的排列方式。 使用 path 向量保存当前正在生成的排列,当其大小达到输入数组的大小时,将其加入结果集。 使用 numvisited 向量标记每个数字是否已经被访问过,以确保每个数字在一个排列中只使用一次。 在递归过程中

    2024年03月13日
    浏览(38)
  • Leetcode77. 组合

    给定两个整数  n  和  k ,返回范围  [1, n]  中所有可能的  k  个数的组合。 你可以按  任何顺序  返回答案。 回溯+剪枝 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

    2024年02月10日
    浏览(33)
  • LeetCode-77-组合

    一:题目描述: 给定两个整数 n 和 k ,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 二:示例与提示 示例 1: 示例 2: 提示: 1 = n = 20 1 = k = n 三:思路 回溯+剪枝 对于这类组合问题,可以将题目所描述的数组通过组合去构建一个树形结构 横向拓

    2024年02月09日
    浏览(27)
  • leetcode77组合 剪枝条件详细解释

    题目:77. 组合 - 力扣(LeetCode) 题解:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 思路来自代码随想录: 带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili带你学透回溯算法-组合问题的剪枝操作(对应力扣题目:77.组合)| 回溯

    2024年02月20日
    浏览(29)
  • LeetCode:77. 组合——回溯法,是暴力法?

    🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 题目描述 :给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 来源:力扣(LeetCode) 难度: 中等 提示: 1 = n = 20 1 = k = n 示例 1: 输入:

    2023年04月18日
    浏览(24)
  • 【回溯算法】77. 组合

    回溯结束条件 track长度等于k 然后收集当前的路径 遍历所有的节点 然后选择当前节点 通过start参数控制遍历 避免产生重复的子集 移除当前的选择

    2024年02月09日
    浏览(28)
  • day24 | 回溯算法基础、77. 组合

    目录: 回溯法理论基础 https://programmercarl.com/回溯算法理论基础.html#题目分类大纲如下 回溯法,一般可以解决如下几种问题: 组合问题:N个数里面按一定规则找出k个数的集合 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的

    2024年02月11日
    浏览(33)
  • LeetCode(力扣)39. 组合总和Python

    https://leetcode.cn/problems/combination-sum/description/

    2024年02月09日
    浏览(27)
  • 40. 组合总和 II - 力扣(LeetCode)

    题目描述 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 输入示例 输出示例 解题代码

    2024年01月23日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包