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