中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python組合總和怎么實現

發布時間:2021-11-26 09:21:28 來源:億速云 閱讀:150 作者:iii 欄目:大數據

本篇內容主要講解“Python組合總和怎么實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python組合總和怎么實現”吧!

題目


給定一個無重復元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。

candidates 中的數字可以無限制重復被選取。

說明:

  • 所有數字(包括 target)都是正整數。

  • 解集不能包含重復的組合。

示例 1:

輸入:candidates = [2,3,6,7], target = 7,
所求解集為:
[
  [7],
  [2,2,3]
]

示例 2:

輸入:candidates = [2,3,5], target = 8,
所求解集為:
[
  [2,2,2,2],
  [2,3,3],
  [3,5]
]

提示:

  • 1 <= candidates.length <= 30

  • 1 <= candidates[i] <= 200

  • candidate 中的每個元素都是獨一無二的。

  • 1 <= target <= 500

解題思路


思路:回溯

先審題,題目給定無重復元素數組和目標值 target,要求找出數組中所有可以使數組元素和為 target 的組合。

其中數組中的元素都為正整數,可以重復使用數組中的元素,但是解集中不能存在重復的組合。

這里可以看示例 1:

輸入:candidates = [2,3,6,7], target = 7,
所求解集為:
[
  [7],
  [2,2,3]
]

這里答案并沒有 [2,3,2] 或 [3,2,2],因為這兩者就被視為與 [2,2,3] 為重復的組合,這里需要特別注意。

在這里 $\color{red}{?}$ 表示不選擇此元素,這樣就可以避免元素組合重復的情況,$\color{green}{?}$ 表示當前路徑選擇元素和大于目標值 target,而 $\color{green}{?}$ 則表示當前路徑選擇元素和等于目標值,可以將此組合添加到返回列表中。

在上面的圖例中,只是簡單畫出了一個分支的情況,但是其他分支選擇的策略相同,這里就省略了。若有不太明白的地方,建議可以自行在草稿上進行補全,也幫助自己理解。

那么就按照上面圖例中的思路,用代碼進行實現,具體如下。

class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        # 結果列表
        ans = []
        # 可能的組合
        tmp = []

        def helper(idx, total):
            """回溯,求組合總和
            Args:
                idx: 選取元素索引
                total: 組合中的元素和
            """
            # 基準條件
            # 當元素和大于目標值,直接返回
            if total > target:
                return
            # 當元素和等于目標值,將組合添加到結果中,返回
            if total == target:
                ans.append(tmp[::])
                return
            
            # 進入分支,同時避免重復組合
            for i in range(idx, len(candidates)):
                # 更新 total 值,
                total += candidates[i]
                # 同時將當前元素嘗試添加到組合中
                tmp.append(candidates[i])
                # 再次進入遞歸
                # 這里可以看文章圖例,遞歸向下,可選元素是從自身開始選擇
                # 這里同時也能避免組合重復,因為不會再次選擇索引 i 前面對應的元素
                helper(i, total)
                # 回溯,回退組合元素及 total 值
                tmp.pop()
                total -= candidates[i]
            
        total = 0
        helper(0, total)
        return ans

到此,相信大家對“Python組合總和怎么實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹阳市| 大连市| 富蕴县| 新泰市| 灵璧县| 滦南县| 阿瓦提县| 阿巴嘎旗| 宣化县| 任丘市| 宁都县| 贵南县| 台湾省| 青神县| 凤翔县| 扎兰屯市| 离岛区| 田阳县| 额济纳旗| 来宾市| 施秉县| 九寨沟县| 岳阳县| 西盟| 乌拉特后旗| 玛曲县| 大洼县| 新蔡县| 沈丘县| 温州市| 大田县| 长丰县| 武冈市| 卢氏县| 肇源县| 融水| 营山县| 开封市| 太谷县| 鄯善县| 揭东县|