找出所有相加之和为 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]]
**难度**: Medium
**标签**: 数组、 回溯算法、
# -*- coding: utf-8 -*-
# @Author : LG
"""
执行用时:28 ms, 在所有 Python3 提交中击败了99.19% 的用户
内存消耗:13.8 MB, 在所有 Python3 提交中击败了5.93% 的用户
解题思路:
回溯
具体实现见代码注释
"""
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
nums = list(range(1, 10)) # 1~9
result = []
def backtrack(begin, current:list):
if sum(current) == n and len(current) == k: # 如果和等于n, 且个数等于k, 则添加到最终结果中
result.append(current[:])
return
if sum(current) > n or len(current) > k: # 如果和大于9 或 当前列表长度大于k, 则跳出
return
for i in range(begin, 9):
current.append(nums[i])
backtrack(i+1, current) # 查看下一个
current.pop() # 回溯
backtrack(0, [])
return result