LeetCode-216-组合总和Ⅱ

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

题目链接:
LeetCode-216-组合总和Ⅱ

解题思路:回溯算法
注意事项注释中有

代码实现:文章来源地址https://www.toymoban.com/news/detail-696770.html

class Solution {
    /**
     * 和为 n,个数为 k
     * 求的是组合,不要求顺序
     * 递归的深度是 k
     */
    public List<List<Integer>> combinationSum3(int k, int n) {
        backtracking(k, n, 1, 0);
        return res;
    }

    // 两个全局变量,一个一维数组放取的元素,一个二维数组放结果
    List<List<Integer>> res = new ArrayList<>();
    List<Integer> path = new ArrayList<>();
    public void backtracking(int k, int targetSum, int startIndex, int sum){
        if (sum > targetSum||path.size()>k){// 这里需要再增加一个条件,sum>目标值返回,个数大于k也返回,可以根据个数提前结束判断,节省时间
            return;
        }
        if (path.size() == k && sum == targetSum){
            res.add(new LinkedList<>(path));// 添加到res中的方法一
//            List<Integer> tmp = new ArrayList<>();// 添加到res中的方法二,也可以一个一个的添加
//            for(int t:path){
//                tmp.add(t);
//            }
//            res.add(tmp);
            return;
        }

        for (int i = startIndex; i <=9 ; i++) {// 区间可以剪枝
            path.add(i);
//             sum += i; // 不推荐这种写法,每次会改变sum的值
            backtracking(k,targetSum,i+1, sum+i); // 直接写到参数里,sum的值也不会变
//            sum -= i;// 探了之后发现不行
            path.remove(path.size()-1);
        }
    }
}

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

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

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

相关文章

  • LeetCode算法题解(回溯)|39. 组合总和、40. 组合总和 II、131. 分割回文串

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

    2024年02月05日
    浏览(58)
  • 【算法与数据结构】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)
  • 【Leetcode60天带刷】day27回溯算法——39. 组合总和,40.组合总和II,131.分割回文串

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

    2024年02月11日
    浏览(45)
  • 力扣日记1.22-【回溯算法篇】216. 组合总和 III

    日期:2023.1.22 参考:代码随想录、力扣 题目描述 难度:中等 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入:

    2024年01月23日
    浏览(40)
  • LeetCode 39题:组合总和

    目录 题目 代码 官方提供 给定一个候选人编号的集合  candidates  和一个目标数  target  ,找出  candidates  中所有可以使数字和为  target  的组合。 candidates  中的每个数字在每个组合中只能使用  一次  。 注意: 解集不能包含重复的组合。  示例 1: 示例 2: 提示: 1 = can

    2024年02月12日
    浏览(35)
  • 【LeetCode】39.组合总和

    给你一个  无重复元素  的整数数组  candidates  和一个目标整数  target  ,找出  candidates  中可以使数字和为目标数  target  的 所有   不同组合  ,并以列表形式返回。你可以按  任意顺序  返回这些组合。 candidates  中的  同一个  数字可以  无限制重复被选取  。如果

    2024年02月16日
    浏览(44)
  • 【Leetcode】377. 组合总和 Ⅳ

    题目链接🔗 给你一个由 不同 整数组成的数组 n u m s nums n u m s ,和一个目标整数 t a r g e t target t a r g e t 。请你从 n u m s nums n u m s 中找出并返回总和为 t a r g e t target t a r g e t 的元素组合的个数。 题目数据保证答案符合 32 32 32 位整数范围。 示例 1: **输入:**nums = [1,2,3],

    2024年04月23日
    浏览(39)
  • LeetCode 377. 组合总和 Ⅳ

    解题思路 之前一直以为这是背包问题,后来发现,这个是有顺序的, 而背包问题是无序的,但是我们也可以用dp分析法来分析。 相关代码

    2024年04月12日
    浏览(44)
  • LeetCode 39. 组合总和(回溯+剪枝)

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

    2024年02月14日
    浏览(43)
  • 【力扣】216. 组合总和 III <回溯、回溯剪枝>

    找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字 1 到 9,每个数字最多使用一次,返回所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] 解释: 1 + 2 + 4 = 7 没有其他符合的组合

    2024年02月10日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包