【力扣】216:組合總和 III | 回溯算法

題目描述

找出所有相加之和爲 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]]

來源:力扣(LeetCode)

算法思路

標準回溯算法 · 改。

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%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章