216组合总和III

题目:找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:所有数字都是正整数。解集不能包含重复的组合。
示例 1:输入: k = 3, n = 7输出: [[1,2,4]]

来源:https://leetcode-cn.com/problems/combination-sum-iii/

法一:自己的代码

思路:同前两个题大同小异,只是剪枝条件不同而已,这个题里面明确要求了最后得到的数组的长度,这个条件实际上就是剪枝条件

from typing import List
class Solution:
    def combinationSum3(self, k: int, n: int) -> List[List[int]]:
        results = []
        nums = [r+1 for r in range(9)]
        # a中存放生成的每个list, nums中存放用于遍历的数,
        def backtrack(a=[], nums=nums,):
            # 剪枝条件,如果长度不够,则不必判断和,直接进入下一次的遍历
            if len(a) < k:
                pass
            # 如果满足条件,则长度一定是k,只要和是n就返回值,并且直接结束下一次的遍历
            elif sum(a) == n:
                print(a)
                results.append(a)
                return
            for i,j in enumerate(nums):
                # (len(a) < k),这个条件必须有,比如输入(2,18),如果没有这个条件,
                # 就需要在上面的if语句中限制,这样限制更省时
                if (sum(a) + j <= n) & (len(a) < k):
                    backtrack( a+[j], nums[i+1:])
                # 如果if中有一个条件不满足,终止循环,因为nums中的数是由小到大排序的,
                # 第n个数不满足的话,n+1个之后的一定不满足,直接终止循环
                else:
                    break
        backtrack()
        return results
if __name__ == "__main__":
    duixiang = Solution()
    a = duixiang.combinationSum3(2, 18)
    print(‘u‘, a)

原文地址:https://www.cnblogs.com/xxswkl/p/11956830.html

时间: 2024-10-09 09:29:30

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]]示例 2: 输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]] 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combination-sum-iii著作权归领

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.和等