使用递归回溯算法,当选择数字num后,在去选择大于num的合法数字,计算过程中的数字和,直到选择了k次,如果数组和等于n则加入结果集
从1开始选择数字,直到搜索完所有排列后,返回结果集
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
res = []
tmp = []
start = 1
sum = 0
def dfs(deep):
nonlocal start
nonlocal sum
if deep == 0:
if sum == n:
res.append([num for num in tmp])
return
for i in range(start, 10):
tmp.append(i)
sum += i
start = i + 1
dfs(deep - 1)
sum -= i
tmp.pop()
dfs(k)
return res