組合總和(Python3)

題目描述:給定一個無重複元素的數組 candidates 和一個目標數 target ,找出candidates 中所有可以使數字和爲 target 的組合。candidates 中的數字可以無限制重複被選取。
說明:所有數字(包括 target)都是正整數。解集不能包含重複的組合。 

示例 1:
輸入: candidates = [2,3,6,7], target = 7,
所求解集爲:[[7],[2,2,3]]

解題思路:我使用的是笨辦法,找出該數組滿足target的全排列,再插入解集前,判斷該排列是否在解集中存在,如果存在,不插入。全排列的求解查看全排列(Python3)

代碼如下( ̄▽ ̄):

class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        self.re = []
        self.target = target
        self.candidates = candidates
        self.sub_combinationSum(target,[])
        return self.re
    
    def sub_combinationSum(self,target,temp):
        if target<0:
            return
        if target==0:
            temp.sort()
            if temp not in self.re:
                self.re.append(temp)
        else:
            for i in self.candidates:
                self.sub_combinationSum(target-i,temp+[i])

時間與空間複雜度:
image.png
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/probl...

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