77. 组合(回溯)

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

和上一道回溯的题思路大致相同:
从前往后依次遍历,之后拼接的数字为当前数字cur的之后的数字,直到list的长度等于k,将list加入到ans当中。

class Solution {
    public List<List<Integer>> combine(int n, int k) {
        List<List<Integer>> ans = new ArrayList<>();
        backtrack(n, k, 1, ans, new ArrayList<>());
        return ans;
    }
    public void backtrack(int n, int k, int cur, List<List<Integer>> ans, List<Integer> list) {
        if (list.size() == k) ans.add(new ArrayList<>(list));
        else {
            for (int i = cur; i <= n; ++i) {
                list.add(i);
                backtrack(n, k, i + 1, ans, list);
                list.remove(list.size() - 1);
            }
        }
    }
}

特别注意:文章来源地址https://www.toymoban.com/news/detail-784581.html

  1. ifelse的区分,否则if要及时return
  2. 回溯的时候新的cur值应该是i+1而不是cur+1
  3. ans.add(new ArrayList<>(list)); 在Java中,对象赋值是传递引用的。这意味着当你将一个对象赋给另一个变量时,它们实陘指向同一个对象。所以,如果你简单地将list添加到ans中,实际上你只是将对list的引用添加到了ans中,而不是list的副本。这就意味着当你后续修改list时,ans中对应的组合也会被修改,因为它们共享相同的引用。

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

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

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

相关文章

  • day24 | 回溯算法基础、77. 组合

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

    2024年02月11日
    浏览(40)
  • 【算法与数据结构】377、LeetCode组合总和 Ⅳ

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :本题明面上说是组合,实际上指的是排列。动态规划排列组合背包问题需要考虑遍历顺序。 d p [ i ] dp[i] d p [ i ] 指的是nums数组中总和为target的元素排列的个数。 d p [ i ] dp[i] d p [

    2024年01月23日
    浏览(40)
  • 力扣日记1.21-【回溯算法篇】77. 组合

    日期:2023.1.21 参考:代码随想录、力扣 终于结束二叉树了!听说回溯篇也是个大头,不知道这一篇得持续多久了…… 题目描述 难度:中等 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n = 4, k = 2 输出:

    2024年01月22日
    浏览(59)
  • leetcode216. 组合总和 III(回溯算法-java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/combination-sum-iii 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输

    2024年02月10日
    浏览(45)
  • 【力扣】77. 组合 <回溯、回溯剪枝>

    给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按任何顺序返回答案。 示例 1: 输入:n = 4, k = 2 输出: 示例 2: 输入:n = 1, k = 1 输出: 提示: 1 = n = 20 1 = k = n 暴力思考:k 等于多少就是多少层循环。 回溯 回溯法解决的问题都可以抽象为树形结构

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

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

    2024年02月02日
    浏览(43)
  • 数据结构-回溯算法

    基本概念 深度优先搜索 :回溯算法通常采用深度优先搜索策略来遍历解空间。这意味着它会沿着一条路径尽可能深入地探索,直到遇到一个死胡 试探与回溯 :溯算法的核心在于“试错”。它会在搜索过程中做出一系列选择,形成一条可能的解路径。当发现当前路径无法导致有

    2024年04月29日
    浏览(32)
  • 算法与数据结构——递归算法+回溯算法——八皇后问题

    八皇后问题是一个经典的回溯算法问题,目的是在8×8的国际象棋棋盘上放置八个皇后,使得没有皇后可以互相攻击(即没有两个皇后在同一行、同一列或同一对角线上)。 回溯算法是一种解决问题的算法,它通过尝试所有可能的解决方案来解决问题。在八皇后问题中,计算

    2024年02月09日
    浏览(52)
  • 【夜深人静学数据结构与算法】回溯算法

    目录 前言: 回溯算法: 回溯法的常见应用: 回溯法的模板: 回溯法的图解:​ 案例: 77. 组合 - 力扣(LeetCode) 总结:         回溯算法是一个比较抽象的算法,因此我们如果初学者,难度可以说是非常大,因此我们利用这篇来讲解回溯算法的理论知识,后续在力扣刷题里

    2024年02月11日
    浏览(39)
  • java数据结构与算法刷题-----LeetCode283. 移动零

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 双指针,用right和left两个指针,将非0元素,全部按顺序换到数组前面。left指向左边非0元素应该插入的位置,right找到非

    2024年01月21日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包