题目:
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
- 只使用数字1到9
- 每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

提示:
2 <= k <= 91 <= n <= 60
思考:
今天的题和昨天的很相似,区别如下:
- 要计算和为n的路径的长度,必须刚好等于k段路
- 对于每条路径,1到9每个数字最多只能使用一次
- candidate数组变为[1,9]的整数
相应的修改如下:
- 在将path加入答案之前,将path的长度与k比较
- 函数中的begin参数不再是当前索引,而是当前数字加一 ----> 避免数字重复加入path
- 将candidate[index]改成用i∈[1, 9]表示
代码如下:
class Solution(object):
def combinationSum3(self, k, n):
"""
:type k: int
:type n: int
:rtype: List[List[int]]
"""
ans = []
def makeTree(k, target, path, ans, begin, count):
if target < 0 or count > k:
return
elif target == 0 and len(path) == k:
ans.append(path)
return
else:
for i in range(begin, 10):
makeTree(k, target - i, path + [i], ans, i+1, count + 1)
makeTree(k, n, [], ans, 1, 0)
return ans
提交通过:

本文描述了一个编程问题,要求找到所有和为n的k个不同数字组合,每个数字1到9仅使用一次。通过递归方法(makeTree函数)实现,利用回溯策略避免重复组合,并在代码中对昨天的问题做了相应调整。
71

被折叠的 条评论
为什么被折叠?



