LeetCode----Combination Sum III

这道题目要求找出所有由1到9的不重复数字组成且和为n的k个数的所有组合。例如,当k=3, n=7时,符合条件的组合包括[1, 2, 4]等。解决方法主要采用深度优先搜索策略。" 50856423,5518633,TCP三次握手与Wireshark实战分析,"['网络协议', '网络安全', '抓包工具', '数据加密', 'HTTP']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Combination Sum III

Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

Ensure that numbers within the set are sorted in ascending order.


Example 1:

Input:  k = 3,  n = 7

Output: 

[[1,2,4]]


Example 2:

Input:  k = 3,  n = 9

Output: 

[[1,2,6], [1,3,5], [2,3,4]]


分析:

一道深度优先搜索题。


代码:

class Solution(object):
    def combinationSum3(self, k, n):
        """
        :type k: int
        :type n: int
        :rtype: List[List[int]]
        """
        solutions = []
        self.dfs(k, n, list(), 0, 0, solutions)
        return solutions

    def dfs(self, k, n, knums, cur, deep, solutions):
        if deep == k - 1:  # 如果集合中已经有k - 1个元素了进行最后一个元素的判断后返回结果
            l = n - sum(knums)
            if l not in knums and max(knums) < l <= 9:
                return knums + [l]
            else:
                return None
        for i in range(cur + 1, min(n, 9) + 1):
            if len(knums) < k:
                res = self.dfs(k, n, knums + [i], i, deep + 1, solutions)
                if res:
                    solutions.append(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值