40. 組合總和 II(力扣LeetCode)

文章目錄

  • 40. 組合總和 II
    • 題目描述
    • 回溯算法

40. 組合總和 II

題目描述

給定一個候選人編號的集合 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。

candidates 中的每個數字在每個組合中只能使用 一次 。

注意:解集不能包含重復的組合。

示例 1:

輸入: candidates = [10,1,2,7,6,1,5], target = 8,
輸出:
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]

示例 2:

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

提示:

  • 1 <= candidates.length <= 100
  • 1 <= candidates[i] <= 50
  • 1 <= target <= 30

回溯算法

// 定義一個Solution類,用于解決組合總和II問題
class Solution {
public:// 定義一個公共方法combinationSum2,它接受一個整數數組candidates和一個整數target,// 返回一個二維整數數組,里面包含了所有可以使數字和為target的組合。vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {// 首先對數組進行排序,這會幫助我們更容易地找到組合,并且能夠跳過重復的組合sort(candidates.begin(),candidates.end());// 輸出排序后的數組元素,這一步通常是為了調試for(int i=0;i<candidates.size();i++)cout<<candidates[i]<<" ";// 定義一個布爾向量used,用于標記candidates中的元素是否被用在當前的組合中vector<bool> used(candidates.size(),false);// 調用backstracking函數,開始回溯算法backstracking(candidates, target, 0, 0, used);// 返回所有找到的組合return result;}private:// 定義一個私有變量result,用于存儲所有找到的組合vector<vector<int>> result;// 定義一個私有變量path,用于存儲當前正在考慮的組合vector<int> path;// 定義一個私有函數backstracking,它實現了回溯算法void backstracking(vector<int>& candidates,int target,int sum,int start,vector<bool>& used){// 如果當前組合的數字和大于目標數target,則當前路徑不可能為解,回溯if(sum>target)return;// 如果當前組合的數字和等于目標數target,則找到了一個解,將它添加到result中if(sum==target){result.push_back(path);return;}// 從start開始遍歷candidates數組,嘗試每個可能的元素for(int i=start;i<candidates.size();i++){// 跳過重復的數字,以避免重復的組合,這是因為數組已經排序if(i>0 && candidates[i]==candidates[i-1] && !used[i-1])continue;// 將candidates[i]添加到當前路徑path.push_back(candidates[i]);// 標記該元素為已使用used[i]=true;// 將candidates[i]的值加到當前和上,并遞歸調用backstracking,注意新的start是i+1,因為每個數字只能使用一次sum+=candidates[i];backstracking(candidates, target, sum, i+1, used);// 回溯,將最后一個元素從路徑中刪除并從當前和中減去,取消標記該元素path.pop_back();used[i]=false;// 從當前和中減去candidates[i]的值,為下一次迭代準備sum-=candidates[i];}}
};

代碼主要由以下幾個部分組成:

  • combinationSum2 公共方法:對給定數組排序,初始化用于記錄元素使用情況的布爾向量,開始回溯搜索,最后返回結果。
  • backstracking 私有方法:實現了回溯算法的核心邏輯,通過遞歸嘗試每個可能的元素,直到找到所有的組合或者終止搜索。
  • result 和 path 私有變量:分別用于存儲找到的所有組合結果和當前遞歸路徑中的組合。
  • used 布爾向量:用于標記數組 candidates 中的元素是否已經被使用過,以防止在同一路徑中重復使用。

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

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

相關文章

istio pod不啟動及訪問報RBAC錯誤問題解決

istio pod不啟動問題解決 在kubernetes集群中安裝istio之后&#xff0c;在創建的depoyment中已經使用了注入注解sidecar.istio.io/inject: true’配置&#xff0c;但是istio pod不創建&#xff0c;代碼示例如下 kind: Deployment apiVersion: apps/v1 metadata:name: name-an…

力扣SQL50 大的國家 查詢

Problem: 595. 大的國家 Code select name,population,area from World where area > 3000000 or population > 25000000;

Sora引發安全新挑戰

文章目錄 前言一、如何看待Sora二、Sora加劇“深度偽造”憂慮三、Sora無法區分對錯四、濫用導致的安全危機五、Sora面臨的安全挑戰總結前言 今年2月,美國人工智能巨頭企業OpenAI再推行業爆款Sora,將之前ChatGPT以圖文為主的生成式內容全面擴大到視頻領域,引發了全球熱議,這…

【Leetcode每日一題】二分查找 - LCR 173. 點名(難度?)(24)

1. 題目解析 Leetcode題目鏈接&#xff1a;LCR 173. 點名 這個問題的理解其實相當簡單&#xff0c;只需看一下示例&#xff0c;基本就能明白其含義了。 核心在于找到題目所給的連續數組中缺失的數字即可。 2.算法原理 在這個升序的數組中&#xff0c;我們發現&#xff1a; …

LeetCode # 1207. 獨一無二的出現次數

1207. 獨一無二的出現次數 題目 給你一個整數數組 arr&#xff0c;請你幫忙統計數組中每個數的出現次數。 如果每個數的出現次數都是獨一無二的&#xff0c;就返回 true&#xff1b;否則返回 false。 示例 1&#xff1a; 輸入&#xff1a;arr [1,2,2,1,1,3] 輸出&#xff1…

Java中Jenkins的應用簡介

目錄 Java中Jenkins的應用什么是Jenkins&#xff1f;Jenkins在Java開發中的應用示例代碼和解決方案 Java中Jenkins的應用 Jenkins是一個流行的開源自動化服務器&#xff0c;可用于持續集成和持續交付。在Java開發中&#xff0c;Jenkins扮演著重要的角色&#xff0c;可以幫助團…

Fastadmin下拉選擇菜單

下拉菜單效果圖如下所示 對應的表字段為 cid int(11) unsigned NOT NULL DEFAULT ‘1’ COMMENT ‘分類ID 1 新手 2VIP 3基金產品’ 步驟如下&#xff1a; 一、lang/zh-cn 中找到對應的文件&#xff0c;添加 配置 二、Model 中添加方法 三、控制器中添加 四、add.html中 …

機器學習高手之路:發現TensorFlow學習網站的無限可能!

介紹&#xff1a;TensorFlow是一個由Google團隊開發的端到端開源機器學習平臺&#xff0c;專為數值計算和機器學習而設計。以下是對TensorFlow的詳細介紹&#xff1a; 開發背景與歷史&#xff1a;TensorFlow起源于谷歌的神經網絡算法庫DistBelief。它被設計成一個靈活的深度學習…

代碼隨想錄Day20 | Leetcode77 組合

題目 給定兩個整數 n 和 k&#xff0c;返回范圍 [1, n] 中所有可能的 k 個數的組合。你可以按 任何順序 返回答案。示例 1&#xff1a; 輸入&#xff1a;n 4, k 2 輸出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ]示例 2&#xff1a; 輸入&#xff1a;n 1, k 1 …

go并發模式之----工作池/協程池模式

常見模式之四&#xff1a;工作池/協程池模式 定義 顧名思義&#xff0c;就是有固定數量的工人&#xff08;協程&#xff09;&#xff0c;去執行批量的任務 使用場景 適用于需要限制并發執行任務數量的情況 創建一個固定大小的 goroutine 池&#xff0c;將任務分發給池中的 g…

順序表基礎

?錄 1. 課前準備 2. 順序表概念及結構 3. 順序表分類 4. 實現動態順序表 正?開始 課前預備 1. 課程?標 C語?語法基礎到數據結構與算法&#xff0c;前?已經掌握并具備了扎實的C語?基礎&#xff0c;為什么要學習數據結構 課程&#xff1f;?通訊錄項? 2. 需要…

小程序分賬方案:實現商戶分賬的簡便與靈活

隨著移動支付的普及和小程序的快速發展&#xff0c;越來越多的商家選擇在微信小程序上開展業務。然而&#xff0c;對于一些有多個分賬方的商戶而言&#xff0c;如何實現快速、準確和靈活的資金分賬成為了一個挑戰。本文將介紹一種高效的小程序分賬方案&#xff0c;幫助商戶輕松…

C++ STL 優先隊列(priority_queue)

1.優先隊列是一種極其特殊的隊列&#xff0c;他與標準的隊列使用線性結構進行計算不同&#xff0c;優先隊列的底層是以散列的狀態&#xff08;非線性&#xff09;表現的&#xff0c;他與標準的隊列有如下的區別&#xff0c;標準的隊列遵從嚴格的先進先出&#xff0c;優先隊列并…

負載均衡Ribbon和LoadBalancer

Ribbon和LoadBalancer都是用于實現負載均衡的工具&#xff0c;但它們在應用場景和實現方式上有所不同。 Ribbon 是一個客戶端負載均衡器&#xff0c;它是一個Java庫&#xff0c;可以在客戶端應用程序中使用。通過在客戶端應用程序中維護服務實例列表&#xff0c;并使用負載均衡…

修改docker默認存儲位置【高版本的docker】

一、修改docker默認存儲位置 1、停服務 systemctl stop docker 2、修改/etc/docker/daemon.json添加新的dcoker路徑 如"data-root": "/mnt/hdd1/docker" 3、保存后重啟服務&#xff1a;systemctl restart docker 二、其他服務的命令 systemctl disab…

AcWing 787. 歸并排序 解題思路及代碼

先貼個題目&#xff1a; 以及原題鏈接&#xff1a;787. 歸并排序 - AcWing題庫https://www.acwing.com/problem/content/789/純板子題&#xff0c;先貼代碼吧&#xff0c;根據代碼講思路&#xff1a; #include <iostream> using namespace std;const int N 1e5 10; in…

【Maven】Maven 基礎教程(三):build、profile

《Maven 基礎教程》系列&#xff0c;包含以下 3 篇文章&#xff1a; Maven 基礎教程&#xff08;一&#xff09;&#xff1a;基礎介紹、開發環境配置Maven 基礎教程&#xff08;二&#xff09;&#xff1a;Maven 的使用Maven 基礎教程&#xff08;三&#xff09;&#xff1a;b…

修飾符【C#】

分為四部分&#xff1a;屬性修飾符&#xff0c;存取修飾符&#xff0c;類修飾符和成員修飾符。 屬性修飾符&#xff1a; [Serializable]&#xff1a;按值將對象封送到遠程服務器。在按值封送對象時&#xff0c;就會創建一個該對象的副本&#xff0c;并將其序列化傳送到服務器…

TCP/UDP,HTTP、HTTPS存在什么風險會影響到網絡安全嗎

近年來&#xff0c;隨著網絡技術的飛速發展&#xff0c;互聯網影響人們的方方面面&#xff0c;我們平時也接觸到許多以前從未聽過的東西&#xff0c;今天德迅云安全就來分享下一些互聯網安全知識&#xff0c;講解一些關于常看到的關于IP, TCP/UDP&#xff0c;HTTP、HTTPS這些名…

QT之液晶電子時鐘

根據qt的<QLDNumber>做了一個qt液晶電子時鐘. 結果 實時顯示當前時間,左鍵可以拖動時鐘在屏幕的位置,右鍵點擊關閉顯示. 實現過程 新建一個class文件,讓這個文件的父類是QLCDNumber 相關功能變量定義和函數實現 .c文件代碼 這里需要注意的一點是event->button是獲取的…