【LeetCode】39.組合總和

組合總和

題目描述:

給你一個?無重復元素?的整數數組?candidates?和一個目標整數?target?,找出?candidates?中可以使數字和為目標數?target?的 所有?不同組合?,并以列表形式返回。你可以按?任意順序?返回這些組合。

candidates?中的?同一個?數字可以?無限制重復被選取?。如果至少一個數字的被選數量不同,則兩種組合是不同的。?

對于給定的輸入,保證和為?target?的不同組合數少于?150?個。

示例?1:

輸入:candidates = [2,3,6,7], target = 7
輸出:[[2,2,3],[7]]
解釋:
2 和 3 可以形成一組候選,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一個候選, 7 = 7 。
僅有這兩種組合。

示例?2:

輸入: candidates = [2,3,5], target = 8
輸出: [[2,2,2,2],[2,3,3],[3,5]]

示例 3:

輸入: candidates = [2], target = 1
輸出: []

提示:

  • 1 <= candidates.length <= 30
  • 2 <= candidates[i] <= 40
  • candidates?的所有元素?互不相同
  • 1 <= target <= 40

思路分析:

? ? ? ? 使用深度優先遍歷?實現,使用一個列表,在?深度優先遍歷?變化的過程中,遍歷所有可能的列表并判斷當前列表是否符合題目的要求。如果不符合進行剪枝。

說明:

  • 以 target = 7 為 根結點 ,創建一個分支的時 做減法 ;
  • 每一個箭頭表示:從父親結點的數值減去邊上的數值,得到孩子結點的數值。邊的值就是題目中給出的 candidate 數組的每個元素的值;
  • 減到 0或者負數的時候停止,即:結點 0和負數結點成為葉子結點;
  • 同時每一次搜索的時候設置?下一輪搜索的起點?begin,即:從每一層的第?222?個結點開始,都不能再搜索產生同一層結點已經使用過的?candidate?里的元素。

代碼實現注解:

class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {//定義一個返回結果的集合List<List<Integer>> res = new ArrayList<>();//定義一個存儲樹路徑上的節點值int len = candidates.length;if(len == 0)return res;//升序排序Arrays.sort(candidates);//定義一個表示數組的長度變量Deque<Integer> path = new ArrayDeque<>();//深度搜索,調用函數dfs(candidates, 0, len, target, path, res);return res;}private void dfs(int[] candidates, int begin, int len, int target, Deque<Integer> path,List<List<Integer>> res) {// 由于進入更深層的時候,小于 0 的部分被剪枝,因此遞歸終止條件值只判斷等于 0 的情況if (target == 0) {//將節點值存入返回集合res.add(new ArrayList<>(path));return;}//begin用于記錄當前遍歷位置for (int i = begin; i < len; i++) {//剪枝操作,將葉子節點小于0的分支減掉if (target - candidates[i] < 0) {break;}path.addLast(candidates[i]);//將i傳入可有效避免結果重復dfs(candidates, i, len, target - candidates[i], path, res);//回溯,移除path中最后一個元素path.removeLast();}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21979.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21979.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21979.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高中數學:平面向量-常考題型匯總

一、數量積運算 例題1 解析 首先&#xff0c;為了化簡運算過程&#xff0c;我們把OA、OB、OC向量記作a、b、c向量。 其次&#xff0c;充分利用已知條件&#xff0c;進行消元&#xff0c;兩邊平方&#xff0c;可以消除一個向量。 a → \mathop{a}\limits ^{\rightarrow} a→ *…

【簡單探索微軟Edge】

&#x1f3a5;博主&#xff1a;程序員不想YY啊 &#x1f4ab;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f917;點贊&#x1f388;收藏?再看&#x1f4ab;養成習慣 ?希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出…

(delphi11最新學習資料) Object Pascal 學習筆記---第14章泛型第2節(Object Pascal中的泛型)

14.2 Object Pascal中的泛型 ? 在前面的例子中&#xff0c;我們已經看到了如何在Object Pascal中定義和使用泛型類。我決定在深入討論這個非常重要但又相當復雜的技術細節之前&#xff0c;通過一個例子來介紹泛型這一特性。在從語言角度討論泛型之后&#xff0c;我們將列舉更…

Hadoop文件存儲格式

1. TextFile 默認格式&#xff0c;存儲方式為行存儲&#xff0c;數據不做壓縮&#xff0c;磁盤開銷大&#xff0c;數據解析開銷大。可結合 Gzip、Bzip2 使用(系統自動檢查&#xff0c;執行查詢時自動解壓)&#xff0c;但使用 這種方式&#xff0c;壓縮后的文件不支持 split&am…

2024.6.3總結1100

今天面試了一家廣西電信公司&#xff0c;然后受到武漢華為的hr的電話溝通&#xff0c;如果沒意外的話&#xff0c;下周就能收到offer了。 求職也算是踏入社會的第一步了&#xff0c;經過兩個月的求職過程&#xff0c;我除了關于求職方面的技巧&#xff0c;也擴展了我的認知。 …

R語言安裝caret包報錯

R語言安裝caret包報錯&#xff1a;Error: package or namespace load failed for ‘caret’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck vI[[i]]): 不存在叫‘recipes’這個名字的程輯包 https://rbasics.org/packages/caret-package-in-r/ R版本的問題&…

商業新聞|你還在用傳統搜索引擎嗎?

??今天是2024年第22周 這是Yura「輸出倒逼輸入」計劃的第11篇文章 全年進度&#xff1a;11/52 01 AI搜索為什么沒超過傳統搜索&#xff1f; 生成式AI在搜索引擎領域掀起了一輪又一輪的波瀾&#xff0c;但是一年多過去了&#xff0c;不管是必應還是perplexity都并沒有動搖Goog…

深度解讀GPT基本原理

GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一種基于Transformer架構的生成式預訓練模型&#xff0c;其核心在于通過大規模無監督學習來捕捉語言知識和模式&#xff0c;并通過微調來適應各種下游任務。以下是GPT基本原理的詳細解讀&#xff1a; 1.Trans…

pandas習題 036:選擇 DataFrame 的多個列

有以下一個 DataFrame&#xff0c;請從中選擇 name 和 english 這兩列形成一個 DataFrame。 import pandas as pddata {name: [Alice, Bob, Charlie, David, Eve],grade: [10, 11, 10, 12, 11],math: [90, 85, 92, 88, 95],english: [85, 92, 88, 90, 92],science: [92, 90, …

【TB作品】MSP430G2553霓虹燈呼吸燈跑馬燈

霓虹燈&#xff1a; 跑馬燈&#xff1a; 呼吸燈&#xff1a; 所有代碼&#xff1a; 下載&#xff1a; https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tabBB08J2

蘋果CMS:怎么添加2019和2020年份篩選

我們進入搜索的時候看到一個關于年份的搜索&#xff0c;那如果上面沒有出現19,20我們該如何處理呢&#xff1f; 我們進入管理后臺 -【系統】-【網站參數配置】-【預留參數】 添加下視頻年代逗號隔開即可 如果要設置地區&#xff0c;語言也實在這里直接配置即可&#xff01;&am…

毫米波雷達陣列天線設計綜合1(MATLAB仿真)

1 天線設計目標 毫米波雷達探測目標的距離、速度和角度&#xff0c;其中距離和角度和天線設計相關性較強。天線增益越高&#xff0c;則根據雷達方程可知探測距離越遠&#xff1b;天線波束越窄&#xff0c;則角度分辨率越高&#xff1b;天線副瓣/旁瓣越低&#xff0c;則干擾越少…

Kibana的使用

在學習elasticsearch時&#xff0c;可以使用Kibana自帶的開發工具&#xff0c;來提高效率&#xff0c; 瀏覽器打開Kibana,在左側菜單欄中找到Dev Tools 該工具提供代碼提示和代碼格式化功能&#xff0c;非常有用&#xff0c;

C++筆記(1)

1. C語言和C的區別&#xff1f; C語言作為一種過程性語言&#xff0c;側重于通過算法描述來指導計算機執行&#xff0c;將復雜程序分解為簡單、可管理的模塊。 C語言支持模塊化編程&#xff0c;每個模塊作為獨立的單元。C融合了3中不同的編程方式&#xff1a;C語言、面向對象…

【已解決】記錄Vue2.x中npm install下載依賴報錯:python2 Error: not found: python2問題(具體操作步驟)

項目場景&#xff1a; 項目場景&#xff1a;在項目開發中&#xff0c;升級了本地node版本后&#xff0c;重新npm install下載依賴報錯找不到python環境 not found: python2 npm ERR! gyp verb check python checking for Python executable “python2” in the PATH 在嘗試了各…

Codeforces Round 950 (Div. 3)(A~F2)

G題只會暴力..不會數據結構 A - 問題 Generator 暴力模擬即可 // Problem: A. Problem Generator // Contest: Codeforces - Codeforces Round 950 (Div. 3) // URL: https://codeforces.com/contest/1980/problem/A // Memory Limit: 256 MB // Time Limit: 1000 ms // //…

哈夫曼樹的構造,哈夫曼樹的存在意義--求哈夫曼編碼

一:哈夫曼樹的構造 ①權值,帶權路徑長度。 ②一組確定權值的葉子節點可以構造多個不同的二叉樹,但是帶權路徑長度min的是哈夫曼樹 ③算法基本思想及其實操圖片演示 注:存儲結構和偽代碼 1 初始化: 構造2n-1棵只有一個根節點的二叉樹,parent=rchild=lchild=-1; 其中…

構造一個高效的哈希表:從基本思路到最終實現

哈希表是計算機科學中常用的數據結構之一&#xff0c;它提供了快速的查找、插入和刪除操作。在本篇博客中&#xff0c;我們將探討如何構造一個高效的哈希表&#xff0c;從最基本的思路逐步完善&#xff0c;直至最終實現。 1. 初始思路&#xff1a;使用布爾數組存儲 我們最初的…

AIGC 全面介紹

隨著人工智能技術的不斷進步&#xff0c;生成式人工智能&#xff08;AI Generated Content, AIGC&#xff09;成為了一個日益熱門的話題。AIGC 指利用人工智能技術生成各類內容&#xff0c;包括文本、圖像、音頻、視頻等。與傳統的內容生成方法相比&#xff0c;AIGC 具有速度快…

谷歌創新框架:從非結構化數據,實現多模態學習

看、聽、說的多模態已成為主流大模型的重要功能之一。但在數據爆炸時代&#xff0c;大模型學習文本類的結構化數據相對還好一些&#xff0c;但要去學習視頻、音頻、圖片等非結構化數據非常困難。 目前&#xff0c;從結構化和非結構化數據實現多模態學習&#xff0c;會隨著模態…