LeetCode 39 [Combination Sum I]

原題

給出一組候選數(shù)字(C)和目標(biāo)數(shù)字(T),找到C中所有的組合,使找出的數(shù)字和為T。C中的數(shù)字可以無限制重復(fù)被選取。

例如,給出候選數(shù)組[2,3,6,7]和目標(biāo)數(shù)字7
所求的解為:[7][2,2,3]

注意

  • 所有的數(shù)字(包括目標(biāo)數(shù)字)均為正整數(shù)。
  • 元素組合(a1, a2, … , ak)必須是非降序(ie, a1 ≤ a2 ≤ … ≤ ak)。
  • 解集不能包含重復(fù)的組合。

解題思路

  • backtracking 在代碼的實(shí)現(xiàn)上可以在使用加了再還原的方式,例如:
path.append(candidates[i])
self.helper(candidates, target - candidates[i], path, i, result)
path.pop()

也可以直接把添加的步驟直接通過參數(shù)傳遞的方式,例如:

self.helper(candidates, target - candidates[i], path + [candidates[i]], i, result)
  • 與permutation和subset的思考方式類似,DFS
  • 每一次向下搜索時,起始位置都和上一次相同,因?yàn)榭梢匀∠嗤夭恢挂淮?,即每次向下傳入?code>index
  • For循環(huán)每次從index開始,避免返回到之前的元素

完整代碼

class Solution(object):
    def combinationSum(self, candidates, target):
        """
        :type candidates: List[int]
        :type target: int
        :rtype: List[List[int]]
        """
        result = []
        if not candidates:
            return result
        candidates.sort()
        self.helper(candidates, target, [], 0, result)
        return result
        
    def helper(self, candidates, target, path, index, result):
        if target == 0:
            result.append(path[:])
            return
        
        for i in range(index, len(candidates)):
            if candidates[i] > target:
                break
            self.helper(candidates, target - candidates[i], path + [candidates[i]], i, result)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,932評論 0 33
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 原題 給出一組候選數(shù)字(C)和目標(biāo)數(shù)字(T),找出C中所有的組合,使組合中數(shù)字的和為T。C中每個數(shù)字在每個組合中只...
    Jason_Yuan閱讀 1,023評論 0 1
  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語閱讀 4,070評論 0 7
  • “請對我說你愛我?!?我望著蝶,蝶望著我。 “我不愛你,我愛的是你的粉?!?“我的粉就是我的心,你愛著我的心就是愛...
    逸之閱讀 553評論 0 4

友情鏈接更多精彩內(nèi)容