Leetcode 40 組合總和 II

題意理解:

  1. ????????每個數字在每個組合中只能使用?一次?
  2. ????????數字可以重復——>難點(如何去重)
  3. ????????每個組合和=target

? ? ? ? 求組合,對合限制,考慮回溯的方法。——將其抽象為樹結構。

? ? ? ? 樹的寬度——分支大小

? ? ? ? 樹的深度——最長的組合(和=target)

??去重難點:

????????根據《代碼隨想錄》關于樹層去重的引入:

? ? ? ? 第一個位置選2,再次選2的話,下面的分支回出現重復的[2,3]組合。

? ? ? ? 實際上保留第一個分支,之后同一位置相同的數值選項可以剪除。

? ? ? ? 用used[]數組來維護是否被訪問的狀態。

????????

回溯的方法:

? ? ? ? 1.確定返回值+參數列表

? ? ? ? 2.確定終止條件|剪枝條件

? ? ? ? 3.單層邏輯|回溯操作

1.暴力回溯+剪枝優化

考慮返回值一般為void, 參數包含數組,和目標值,當前數值指示下標

終止條件: sum>=4,特別的sum==4時收集結果。

單層遞歸邏輯:一定要對sum和path、used數組做好回溯操作。

數層剪枝:candidates[i-1]==candidates[i]遇到重復值

? ? ? ? used[i-1]=true:表示上一個重復的值,在該組合內被用到。

? ? ? ? used[i - 1] == false:表示上一個重復值在該組合內沒有用到,應該是同一樹層用到——即數層重復,剪枝。

List<List<Integer>> result=new ArrayList<>();LinkedList<Integer> path=new LinkedList<>();int sum=0;public List<List<Integer>> combinationSum2(int[] candidates, int target) {boolean[] used=new boolean[candidates.length];Arrays.sort(candidates);Arrays.fill(used, false);backtrackig(candidates,target,0,used);return result;}public void backtrackig(int[] candidates, int target,int startIndex,boolean[] used){//終止|剪枝if(sum>target) return;else if (sum==target) {result.add(new ArrayList<>(path));return;}//單層遞歸邏輯for(int i=startIndex;i<candidates.length;i++){//數層剪枝if(i!=0&&candidates[i-1]==candidates[i]&&used[i-1]==false) continue;path.add(candidates[i]);sum+=candidates[i];used[i]=true;backtrackig(candidates,target,i+1,used);path.removeLast();sum-=candidates[i];used[i]=false;}}

注意兩個特殊的地方:

Arrays.sort(candidates);//數組排序

Arrays.fill(used, false);//數組填充,實際上該數組默認也是false.

2.分析

時間復雜度:O(2^{n} \times n)

空間復雜度:O(n)

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

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

相關文章

Spring IoC和DI

目錄 一. Spring是什么 IoC DI 二. IoC&DI的使用 IoC 1.Controller&#xff08;控制器存儲&#xff09; 2.Service&#xff08;服務存儲&#xff09; 3.Repository&#xff08;倉庫存儲&#xff09; 4.Componemt&#xff08;組件存儲&#xff09; 5.Configuratio…

解決Could not establish connection to : XHR failed

解決Could not establish connection to : XHR failed 問題描述 用vscode用遠程連接服務器時總報上面的錯誤&#xff0c;用xshell和Xftp和vscode終端都可以連上&#xff0c;但是用vscode的ssh連接缺總報錯&#xff0c;導致無法連接服務器進行代碼調試 一、原因 原因可能是在…

【MATLAB】 數據、矩陣、行、列翻轉

1.MATLAB函數fliplr 用法&#xff1a;fliplr(X) 功能&#xff1a;matlab中的fliplr函數實現矩陣的左右翻轉。 fliplr(X)使矩陣X沿垂直軸左右翻轉。 相關函數&#xff1a;flipud函數可以實現矩陣的上下翻轉。 備注&#xff1a;matlab中提供了許多對矩陣操作的函數&#xff0c;可…

Go json 差異比較 json-diff(RFC6902)

Go json 差異比較 json-diff(RFC 6902) 畢業設計中過程中為了比較矢量圖的差異而依據 RFC 6902 編寫的一個包&#xff0c;現已開源&#xff1a; Json-diff 使用 go get -u github.com/520MianXiangDuiXiang520/json-diff序列化與反序列化 與官方 json 包的序列化和反序列化不…

后端開發面試題

這是一波今年7月份的大廠面試題&#xff0c;分享下&#xff5e;&#xff5e; Mybatis三級緩存 Mybatis懶加載 分布式事務 transaction gradle和maven區別 抽象類、多態 Springboot啟動 ConcurrentHashMap 樂觀鎖、悲觀鎖 docker k8s常用命令 電商業務從什么維度分庫分…

AcWing 95. 費解的開關(遞推)

題目鏈接 活動 - AcWing 本活動組織刷《算法競賽進階指南》&#xff0c;系統學習各種編程算法。主要面向有一定編程基礎的同學。https://www.acwing.com/problem/content/97/ 題解 只要第一行開關的狀態確定&#xff0c;則所有開關的狀態都可以被推出來。第一行開關總共有種操…

jemeter,同一線程組內,調用cookie實現接口關聯

取cookie方式參考上一篇&#xff1a;jemeter&#xff0c;取“臨時重定向的登錄接口”響應頭中的cookie-CSDN博客 元件結構 登錄后要執行的接口為“api/get_event_list/”&#xff0c;在該HTTP請求下創建HTTP信息頭管理器&#xff0c;配置如下&#xff1a; 執行測試后&#xff0…

【ensp實踐】eNSP實戰篇(4)用eNSP實驗來認識什么是OSPF及OSPF配置?

OSPF目錄 寫在前面涉及知識一、什么是OSPF&#xff1f;二、OSPF特性&#xff08;優缺點&#xff09;2.1 OSPF優點2.2 OSPF缺點 三、OSPF實驗3.1 打開ensp&#xff0c;添加設備3.2 建立連線3.3 配置及ospf命令【核心】3.3.1 配置PC機3.3.2 設置命令 3.4 驗證效果3.4.1、驗證OSPF…

Spring IoC如何存取Bean對象

小王學習錄 IoC(Inversion of Control)1. 什么是IoC2. 什么是Spring IoC3. 什么是DI4. Spring IoC的作用 存儲Bean對象1. 創建Bean2. 將Bean注冊到Spring中. 取Bean對象.1. 獲取Spring上下文信息使用ApplicationContext和BeanFactory的區別 2. 獲取指定Bean對象 IoC(Inversion …

使用JLink仿真器實現調試打印的N種方法

方法一&#xff1a;使用MCU的串口 這是最古老也是最簡單的方法。 電腦上面插一個USB轉TTL&#xff0c;然后與MCU的UART_RX/UART_TX/GND連接起來。PC端再打開一個串口調試助手。兩邊的波特率一致&#xff0c;就可以收到MCU發過來的打印信息了。 方法二&#xff1a;使用JLink仿…

【EMNLP 2023】面向Stable Diffusion的自動Prompt工程算法

近日&#xff0c;阿里云人工智能平臺PAI與華南理工大學朱金輝教授團隊合作在自然語言處理頂級會議EMNLP2023上發表了BeautifulPrompt的深度生成模型&#xff0c;可以從簡單的圖片描述中生成高質量的提示詞&#xff0c;從而使文生圖模型能夠生成更美觀的圖像。BeautifulPrompt通…

Android--Jetpack--Databinding源碼解析

慢品人間煙火色&#xff0c;閑觀萬事歲月長 一&#xff0c;基本使用 關于databinding的基本使用請看之前的文章 Android--Jetpack--Databinding詳解-CSDN博客 二&#xff0c;xml布局解析 分析源碼呢&#xff0c;主要就是從兩方面入手&#xff0c;一個是使用&#xff0c;一個…

STM32F407-14.1.0-01高級定時器簡介

TIM1 和 TIM8 簡介 高級控制定時器&#xff08;TIM1 和 TIM8&#xff09;包含一個 16 位自動重載計數器&#xff0c;該計數器由可編程預分頻器驅動。 此類定時器可用于各種用途&#xff0c;包括測量輸入信號的脈沖寬度&#xff08;輸入捕獲&#xff09;&#xff0c;或者生成輸出…

微軟NativeApi-NtQuerySystemInformation

微軟有一個比較實用的Native接口&#xff1a;NtQuerySystemInformation&#xff0c;具體可以參考微軟msdn官方文檔&#xff1a;NtQuerySystemInformation&#xff0c; 是一個系統函數&#xff0c;用于收集特定于所提供的指定種類的系統信息。ProcessHacker等工具使用NtQuerySys…

Javascript 數組array賦值與取值

Javascript 數組array賦值與取值 目錄 Javascript 數組array賦值與取值 一、數組元素的賦值 1、在創建Array對象時直接賦值 2、利用Array對象的元素下標對數組進行賦值 二、數組元素的獲取 一、數組元素的賦值 對數組元素賦值共有2種方法&#xff1a; &#xff08;1&am…

每日一題,頭歌平臺c語言題目

任務描述 題目描述:輸入一個字符串&#xff0c;輸出反序后的字符串。 相關知識&#xff08;略&#xff09; 編程要求 請仔細閱讀右側代碼&#xff0c;結合相關知識&#xff0c;在Begin-End區域內進行代碼補充。 輸入 一行字符 輸出 逆序后的字符串 測試說明 樣例輸入&…

項目實戰第四十七講:易寶支付對接詳解(保姆級教程)

易寶支付對接(保姆級教程) 為了實現項目的支付需求,公司選擇了易寶支付進行對接,本文是項目實戰第四十七講,詳解易寶支付對接。 文章目錄 易寶支付對接(保姆級教程)1、需求背景2、流程圖3、技術方案4、相關接口4.1、入駐相關(商戶入網)4.2、賬戶相關接口(充值、提現、…

【LVGL】STM32F429IGT6(在野火官網的LCD例程上)移植LVGL官方的例程(還沒寫完,有問題 排查中)

這里寫目錄標題 前言一、本次實驗準備1、硬件2、軟件 二、移植LVGL代碼1、獲取LVGL官方源碼2、整理一下&#xff0c;下載后的源碼文件3、開始移植 三、移植顯示驅動1、enable LVGL2、修改報錯部分3、修改lv_config4、修改lv_port_disp.c文件到此步遇到的問題 Undefined symbol …

Vue路由守衛筆記

路由守衛 當路由切換時&#xff0c;判斷權限 路由守衛類型 1.全局守衛 2.獨享守衛 3.組件內守衛 1.全局守衛 1.前置路由守衛 全局前置路由守衛————初始化的時候被調用、每次路由切換之前被調用 在需要加上路由守衛的路由配置中加上 meta&#xff1a;{isAuth&#xff1…