題目描述
找出所有相加之和爲 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]]
算法思路
標準回溯算法 · 改。
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
ls=list(range(1,10))
def helper(ls,k,n,tp=[]):
if len(tp)==k and sum(tp)==n:
res.append(tp)
for i in range(len(ls)):
if sum(tp)>n:return
helper(ls[i+1:],k,n,tp+[ls[i]])
res=[]
helper(ls,k,n)
return res
修改部分兩點:
if sum(tp)>n:return
用於剪枝
helper(ls[i+1:],k,n,tp+[ls[i]])
組合排序這裏不存在逆序。
執行用時 :32 ms, 在所有 Python3 提交中擊敗了93.17%的用戶
內存消耗 :13.8 MB, 在所有 Python3 提交中擊敗了100.00%的用戶