题目:找出所有相加之和为 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]]
此题与前面两个组合题目思路类似 组合总数II
class Solution:
def __init__(self):
self.result_all = None
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
# """
# :type k: int
# :type n: int
# :rtype: List[List[int]]
# """
# self.result_all = []
# self.dfs(n, k, 1, [])
# return self.result_all
# def dfs(self, n, k, start, result):
# if len(result) == k:
# if sum(result) == n:
# self.result_all.append(result[:])
# return
# pre_nums = []
# for i in range(start, 10):
# if i in pre_nums:
# continue
# if sum(result) + i > n:
# break
# pre_nums.append(i)
# result.append(i)
# self.dfs(n, k, i+1, result)
# result.pop()
# return
"""
:type k: int
:type n: int
:rtype: List[List[int]]
"""
self.res = []
list1 = range(1,10)
def dfs(l,n,temp):
if n == 0 and len(temp) == k:
self.res.append(temp[:])
return
if n < 0 or len(temp) == k :
return
for i in range(len(l)):
temp.append(l[i])
dfs(l[i+1:],n-l[i],temp)
temp.pop()
dfs(list1,n,[])
return self.res