找出所有相加之和为 n
的 k
个数的组合,且满足下列条件:
- 只使用数字1到9
- 每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
示例 1:
输入: k = 3, n = 7 输出: [[1,2,4]] 解释: 1 + 2 + 4 = 7 没有其他符合的组合了。
示例 2:
输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]] 解释: 1 + 2 + 6 = 9 1 + 3 + 5 = 9 2 + 3 + 4 = 9 没有其他符合的组合了。
示例 3:
输入: k = 4, n = 1 输出: [] 解释: 不存在有效的组合。 在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。
关于组合问题,选和不选,枚举选哪个都是比较经典的问题,但是python的强大之一就是库的丰富,我们可以用itertools库中的combinations函数来解决组合问题,比较暴力,仅供参考。
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
q = [i for i in range(1,10)]
w = []
for i in combinations(q, k):
if sum(i) == n:
w.append(i)
return w
from itertools import combinations
# 生成指定长度的所有可能的组合
# combinations(iterable, r):返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序
iterable = ['a', 'b', 'c']
combs = list(combinations(iterable, 2))print(combs) # 输出结果为 [('a', 'b'), ('a', 'c'), ('b', 'c')]