216. 组合总和 III

找出所有相加之和为 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]]

法1 回溯

思路
题解
class Solution: def combinationSum3(self, k: int, n: int) -> List[List[int]]: self.res = [] self.dfs(path=[], sum_=0, start=1, n=n, k=k) return self.res def dfs(self, path, sum_, start, n, k): if sum_ == n and len(path) == k: self.res.append(path[:]) # 和超过了, 组合长度超过了 if len(path) >= k or sum_ >= n: return for i in range(start, 10): # 凑不出 k 个数字 if len(path) + 9 - i + 1 < k: return # 凑不够n了 if sum_ + sum(range(i, 10)) < n: return path.append(i) sum_ += i self.dfs(path, sum_, i+1, n, k) path.pop() sum_ -= i