思路
枚举所有的选法,看每个选法的元素总和是否符合目标值
顺序
依次枚举每个数从哪个位置上选
dfs(仍需要枚举的数字有多少个,开始枚举的数字(从1到9),目标值-当前选择的所有数的和)
import copy
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
self.path = []; self.ans = []
self.dfs(k, 1, n) # k指还有k个元素没有枚举
return self.ans
def dfs(self, k, start, n):
if not k: # 若所有元素枚举完且剩余目标值为0,添加路径到答案
if not n: self.ans.append(copy.copy(self.path))
return None
# 从i到9至少要有k个数,即9-i+1>=k -> 10-k >=i,否则肯定不能枚举到所求路径
for i in range(start, 10 - k + 1):
self.path.append(i)
self.dfs(k-1, i+1, n - i)
self.path.pop() # 恢复现场