题目
找出所有相加之和为 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]]
解题思路
k
个和为n
的数的组合,应该由k - 1
个和为n - num
的数再加上num
组合而来,所以还是一个回溯的问题。
Time complexity:
o
(
C
n
k
∗
k
)
o(C_n^k*k)
o(Cnk∗k)
Space complexity:
o
(
n
)
o(n)
o(n)
代码
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
res = []
def helper(already_done: list, available_nums: list, cur_k: int, target: int) -> None:
if target == 0 and cur_k == 0:
res.append(already_done)
return
if cur_k == 0:
return
for index, each_num in enumerate(available_nums):
if target - each_num < 0:
continue
helper(already_done + [each_num], available_nums[index + 1:], cur_k - 1, target - each_num)
helper([], list(range(1, 10)), k, n)
return res