216. 组合总和 III

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

所有数字都是正整数。
解集不能包含重复的组合。 
示例 1:

输入: k = 3, n = 7
输出: [[1,2,4]]
示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combination-sum-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 1 public class Solution {
 2     private List<List<Integer>> res = null;
 3     private List<Integer> subset = null;
 4
 5     // 第cnt个数
 6     private void helper(int cur, int cnt, int sum, int k, int n){
 7         for (int i = cur; i < 10; i++) {
 8             if (sum+i > n)
 9                 break;
10             subset.add(i);
11             if (i+1 < 10 && cnt+1 <= k)
12                 helper(i+1, cnt+1, sum+i, k,n);
13             if (cnt == k && sum+i == n)
14                 res.add(new ArrayList<>(subset));
15             subset.remove(subset.size()-1);
16         }
17     }
18
19     public List<List<Integer>> combinationSum3(int k, int n) {
20         res = new ArrayList<>();
21         subset = new ArrayList<>();
22         helper(1, 1, 0, k, n);
23         return res;
24     }
25
26     public static void main(String[] args) {
27         List<List<Integer>> lists = new Solution().combinationSum3(3, 15);
28         for (List<Integer> e : lists) {
29             System.out.println(e);
30         }
31     }
32 }

原文地址:https://www.cnblogs.com/yfs123456/p/11617673.html

时间: 2024-10-03 00:30:04

216. 组合总和 III的相关文章

LeetCode 216. 组合总和 III(Combination Sum III)

题目描述 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合. 示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] 示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]] 解题思路 回溯算法,从第一个数开始依次添加数字并比较当前数字总和,若相等就添加到结果集合中. 代码 1 class Solution

leetcode 216. 组合总和 III

找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有1 - 9的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合. 示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] 示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]] 思路:和上一题的思路一样, 只是加了一个条件, 长度要是规定的长度 1 class Solution { 2 public: 3 void dfs

216组合总和III

题目:找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字.说明:所有数字都是正整数.解集不能包含重复的组合. 示例 1:输入: k = 3, n = 7输出: [[1,2,4]] 来源:https://leetcode-cn.com/problems/combination-sum-iii/ 法一:自己的代码 思路:同前两个题大同小异,只是剪枝条件不同而已,这个题里面明确要求了最后得到的数组的长度,这个条件实际上就是剪枝条件 fro

216 Combination Sum III 组合总和 III

找出所有可能的 k 个数,使其相加之和为 n,只允许使用数字1-9,并且每一种组合中的数字是唯一的.示例 1:输入: k = 3, n = 7输出:[[1,2,4]]示例 2:输入: k = 3, n = 9输出:[[1,2,6], [1,3,5], [2,3,4]]详见:https://leetcode.com/problems/combination-sum-iii/description/ class Solution { public: vector<vector<int>>

LeetCode 216.组合求和III

出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数.解集不能包含重复的组合. 示例 1: 输入: k = 3, n = 7输出: [[1,2,4]]示例 2: 输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]] 算法:集合的二进制表示 class Solution { public: vector<vector<int>> combinationS

组合总和3 leetcode 216

组合总和3 解题思路:递归回溯 class Solution { public List<List<Integer>> result = new ArrayList<List<Integer>>(); public List<List<Integer>> combinationSum3(int k, int n) { List<Integer> list = new ArrayList<>(); combina

动态规划(0-1背包)--- 组合总和

组合总和 377. Combination Sum IV (Medium) nums = [1, 2, 3] target = 4 The possible combination ways are: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1) Note that different sequences are counted as different combinations. Therefore the ou

【LeetCode】437. 路径总和 III

437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数. 示例: root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / 5 -3 / \ 3 2 11 / \ 3 -2 1 返回 3.和等于 8

[LeetCode] 437. 路径总和 III ☆☆☆(递归)

路径总和 III 描述 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数. 示例: root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3 / \ \ 3 2 11 / \ \3 -2 1 返回 3.和等