leetcode77组合 剪枝条件详细解释

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

题目:77. 组合 - 力扣(LeetCode)

题解:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路来自代码随想录:

带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili带你学透回溯算法-组合问题的剪枝操作(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili

对其中的剪枝条件做详细解释

剪枝部分代码为

for(int i=index;i<=n+path.size()+1-k;++i) 
        {
            path.push_back(i);
            backtracking(n,k,i+1);
            path.pop_back();
        }

剪枝条件为

i<=n+path.size()+1-k;

1. i是起到一个遍历的作用,未剪枝之前,它的作用是从【i,n】这个区间里遍历,找到继续加入到path里的数值

2. 给出n,k 求【1,n】中,大小为k(元素个数为k)的集合

3. 这个集合一定不是正确结果的情况:已经选择的元素个数+剩下还没选择的元素个数<k的时候一定不可能 

n=4,k=4时

 从{1,2,3,4}里选,选了1 剩下{2,3,4} 1+3>=4 可行

选了2 剩下{3,4}(没有1避免重复) 1+2<4 不可行

以此类推

4. 已经选择的元素个数 path.size()

   剩下还未选择的元素个数 【i,n】左闭右闭区间元素个数为 n-i+1

   所以 path.size()+(n-i+1)>=k 时才有可能继续

所以条件为i<=n+path.size()+1-k;文章来源地址https://www.toymoban.com/news/detail-830312.html

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

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

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

相关文章

  • LeetCode:77. 组合——回溯法,是暴力法?

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

    2023年04月18日
    浏览(30)
  • LeetCode 39. 组合总和(回溯+剪枝)

    链接:LeetCode 39. 组合总和 难度:中等 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选

    2024年02月14日
    浏览(43)
  • 代码随想录Day20 回溯算法 LeetCode77 组合问题

    以下内容更详细解释来自于:代码随想录 (programmercarl.com) 回溯法也叫回溯搜索法,是搜索法的一种,我们之前在二叉树中也经常使用到回溯来解决问题,其实 有递归就有回溯 ,有的时候回溯隐藏在递归之下,我们不容易发觉,今天我们来详细介绍一下什么是回溯,它能解决哪些问题.

    2024年02月08日
    浏览(50)
  • 二分(折半查找)详细解答(边界条件终止条件等等详细解释)

    刷 Leetcode 总能遇到关于二分的题目,但是之前也只是草草地了解一下,每次在使用的时候都需要找模板,要不然就需要对于边界条件进行调试,着实是很麻烦!!! 首先来简单介绍一下二分:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半

    2024年02月05日
    浏览(51)
  • leetcode刷题电话号码的字母组合(人工智能解答版本)

    一开始想用暴力破解的方法来进行解题,就是循环。但是想到随着数字的增多,循环行不通。想到最近使用的一个人工智能助手,于是我把题目发送给了它,直接给出了递归的解决方法。递归分为两个条件,一个就是当列表中的元素的数目达到了数字的个数,那么将列表中的

    2024年02月22日
    浏览(44)
  • 【回溯算法】77. 组合

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

    2024年02月09日
    浏览(35)
  • 77. 组合(回溯)

    和上一道回溯的题思路大致相同: 从前往后依次遍历,之后拼接的数字为当前数字 cur 的之后的数字,直到 list 的长度等于 k ,将 list 加入到 ans 当中。 特别注意: if 和 else 的区分,否则 if 要及时 return 回溯的时候新的 cur 值应该是 i+1 而不是 cur+1 ans.add(new ArrayList(list)); 在

    2024年02月02日
    浏览(43)
  • 力扣77. 组合

    思路: 找到一个长度为 nnn 的序列 aaa 的所有子序列,代码框架: 本题递归结束条件为序列中元素为 k,即: 已经构建的序列S\\\',剩余的数不足以构成满足条件的序列 S: 剩余的数长度 n - (cur - 1) size(S\\\') + (n - (cur - 1)) size(S) = k 这种情况也需要退出递归 综上,完整代码

    2024年01月16日
    浏览(33)
  • C++力扣题目77--组合

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

    2024年01月17日
    浏览(41)
  • day24 | 回溯算法基础、77. 组合

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

    2024年02月11日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包