遞歸回溯剪枝-子集

LCR 079. 子集 - 力扣(LeetCode)

方法一?

1. 決策樹:對于決策樹,思考的角度不同,畫出的決策樹也會不同,這道題可以從兩個角度來畫決策樹。

2. 考慮全局變量的使用:

使用全局變量 List<List<Integer>> ret 來存子集;

使用全局變量?List<Integer>?path 來存遞歸過程中的值;

3. 關注遞歸本身,回溯,剪枝,遞歸出口:

1. 遞歸本身:使用方法 dfs(nums,i),nums為參數數組,i 表示當前進行選擇或者不選擇的目標數是 nums[i],當選擇目標數的時候,path + nums[i] 然后遞歸下一輪,不選擇的時候,直接遞歸下一輪,dfs(nums,i+1);

2. 剪枝:從決策樹可以看出,這道題是不需要到剪枝環節的;

3. 回溯:當決策樹中的節點對目標數進行判斷完成后,需要進行 "恢復現場" 操作,也就是需要將當前的全局變量 path 的最后一個元素去掉,從而恢復現場,可以按下圖來理解;

4. 遞歸出口:當 dfs(nums,i) 中 i 的值 == nums.size 的時候,說明已經超出數組的范圍了,此時就可以返回了;

代碼實現?

class Solution {List<List<Integer>> ret;List<Integer> path;public List<List<Integer>> subsets(int[] nums) {ret = new ArrayList<>();path = new ArrayList<>();dfs(nums,0);return ret;}public void dfs(int[] nums,int i){// 遞歸出口if(i == nums.length){ret.add(new ArrayList(path));return;}// 選path.add(nums[i]);dfs(nums,i+1);// 回溯,恢復現場path.remove(path.size()-1);// 不選dfs(nums,i+1);}
}

方法二?

?第二種決策樹:這種思考方式,就是從選擇多少個元素來考慮,但要求的是從數組 i 定位從小到大進行選擇,在選擇完前 n 個元素后,繼續選擇 n+1 個元素時,只能是選擇當前 i 之后對應的元素,也就是數組 [1,2,3] 當選擇到 2 的時候,再進行選擇時,就只能選 3 了,不能選 1 ,這樣是為了避免重復情況出現;

2. 全局變量的使用與第一種方法一樣;?

3. 關注遞歸本身,回溯,剪枝,遞歸出口:

1. 觀察決策樹,可以發現每一個節點都作為子集,也就是每次進入都可以作為一個結果然后存進全局變量 ret 中;

2. dfs(nums[],i) 此處的 i 可以理解為當前的 path 要從 i 開始進行選擇;

3. 跟第一種情況相同,不需要進行剪枝;

4. 回溯也跟第一種情況相同,將最后一個元素去掉;

5. 并且要注意,在這種情況下,是沒有遞歸出口的,因為每個節點都作為子集,在 for 循環中循環結束后就會自動返回;

代碼實現?

class Solution {List<List<Integer>> ret;List<Integer> path;public List<List<Integer>> subsets(int[] nums) {ret = new ArrayList<>();path = new ArrayList<>();dfs(nums,0);return ret;}public void dfs(int[] nums,int i){// 每個節點都是子集,進入就添加到 ret 中ret.add(new ArrayList(path));for(int j=i;j<nums.length;j++){     // 從節點 i 開始path.add(nums[j]);dfs(nums,j+1);      // 回溯,恢復現場path.remove(path.size()-1);}}
}

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

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

相關文章

Python 基礎【五】--數據類型-序列【2023.11.24】

1.定義 Python 中的序列是一塊可存放多個值的連續內存空間&#xff0c;所有值按一定順序排列&#xff0c;每個值所在位置都有一個編號&#xff0c;稱其為索引&#xff0c;我們可以通過索引訪問其對應值。 list1 [Google, Runoob, 1997, 2000] list2 [1, 2, 3, 4, 5 ] list3…

馬克思主義基本原理課后題答案

吐血整理馬原word版課后題答案&#xff0c;大家可以自行修改&#xff0c;持續更新中... 【限于篇幅原因&#xff0c;需要的同學可以點贊收藏后&#x1f44d;&#xff0c;掃碼下方的公眾號&#xff0c;回復相應關鍵詞&#xff08;馬原&#xff09;自行領取?~】

【05】ES6:函數的擴展

一、函數參數的默認值 ES6 允許為函數的參數設置默認值&#xff0c;即直接寫在參數定義的后面。 1、基本用法 默認值的生效條件 不傳參數&#xff0c;或者明確的傳遞 undefined 作為參數&#xff0c;只有這兩種情況下&#xff0c;默認值才會生效。 注意&#xff1a;null 就…

react的開發中關于圖片的知識

React是一個流行的JavaScript庫&#xff0c;用于構建用戶界面。在React開發中&#xff0c;圖片是一個非常重要的元素&#xff0c;可以用于美化界面和展示內容。本篇博客將詳細講解React中關于圖片的知識。 1. React中使用圖片 在React中使用圖片非常簡單&#xff0c;只需要使…

【Web題】狼追兔問題

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

解決Resolving Android Dependencies問題

無論是谷歌的Admob&#xff0c;還是Unity的Level play&#xff0c; 在windows&#xff08;win10, win11&#xff09;下&#xff0c;都出現了resolving android dependencies 報錯并且卡住的問題&#xff0c;如圖: 主要錯誤&#xff0c;是找不到這個gradlew.bat文件。 在指定位置…

什么是單元測試?

什么是單元測試 單元測試是軟件開發中的一種測試方法&#xff0c;旨在驗證各個軟件組件或模塊的功能正確性。在敏捷開發環境中&#xff0c;單元測試尤為重要&#xff0c;因為它有助于確保代碼的質量和穩定性。下面是一些關于單元測試的關鍵點&#xff1a; 定義&#xff1a;單元…

力扣每日一題-統計和小于目標的下標對數目-2023.11.24

力扣每日一題&#xff1a;統計和小于目標的下標對數目 開篇 今天這道力扣打卡題寫得我好狼狽&#xff0c;一開始思路有點問題&#xff0c;后面就是對自己的代碼到處縫縫補補&#xff0c;最后蒙混過關。只能分享一下大佬的代碼&#xff0c;然后我幫大家分享代碼的思路。 題目鏈…

大模型能否生成搜索引擎的未來?

文&#xff5c;郝 鑫 編&#xff5c;劉雨琦 ChatGPT火爆之前&#xff0c;水面下&#xff0c;也有中國公司也在朝著智能助手的方向努力。夸克便是其中之一。在GPT風靡科技圈后&#xff0c;國內就開始陸續冒出一些大模型廠商。對當時夸克而言&#xff0c;做大模型毋庸置疑&am…

django(千鋒教育)

創建一個django項目 官網下載python最新版本 配置到環境變量中 打開intlij編輯器 創建django項目 安裝django&#xff1a;pip install django 創建django項目: django-admin startproject django01 創建djangoAPP&#xff1a;python manage.py startapp App 啟動&#xff1a…

設置定時自動請求測試_自動定時循環發送http_post請求---postman工作筆記001

其實就是創建接口文件夾的時候,有個monitor collection 用來監聽接口執行情況,這里就可以設置 可以看到多久執行一次對吧,這里可以設置每幾分鐘執行一次,一共執行多少次等等 但是這里要說明一下,如果需要使用monitor功能,必須需要登錄, 所以如果這里點擊monitor collection…

媒體增加日活量的有效策略

隨著數字媒體的蓬勃發展&#xff0c;提高日活量成為媒體平臺追求的重要目標之一。日活量的增加不僅意味著更廣泛的影響力&#xff0c;還能為媒體平臺帶來更多的商業機會。以下是一些有效的策略&#xff0c;可幫助媒體提高日活量&#xff1a; admaoyan貓眼聚合 內容優質化&#…

**QT與目標板聯合調試_斷點仿真**

原文地址: https://blog.csdn.net/u012851408/article/details/86715626

仙女麻麻看過來~這是不是你們在找的外套?

分享女兒的秋冬穿搭 時尚與美觀兼具的毛毛外套 洋氣百搭不挑人穿 誰穿對都好看系列 經典寬松版型 不臃腫對身材包容性很強 小編墻裂推薦哦&#xff01;&#xff01;

NFT Insider115:The Sandbox開設元宇宙Diorama快閃店,?YGG Web3 游戲峰會已開幕

引言&#xff1a;NFT Insider由NFT收藏組織WHALE Members、BeepCrypto聯合出品&#xff0c;濃縮每周NFT新聞&#xff0c;為大家帶來關于NFT最全面、最新鮮、最有價值的訊息。每期周報將從NFT市場數據&#xff0c;藝術新聞類&#xff0c;游戲新聞類&#xff0c;虛擬世界類&#…

RevCol:可逆的柱狀神經網絡

文章目錄 摘要1、簡介2、方法2.1、Multi-LeVEl ReVERsible Unit2.2、可逆列架構2.2.1、MACRo設計2.2.2、MicRo 設計 2.3、中間監督 3、實驗部分3.1、圖像分類3.2、目標檢測3.3、語義分割3.4、與SOTA基礎模型的系統級比較3.5、更多分析實驗3.5.1、可逆列架構的性能提升3.5.2、可…

貴金屬交易指南:如何在市場中獲利?

貴金屬市場一直以來都是投資者追逐利潤的熱門選擇&#xff0c;然而&#xff0c;貴金屬市場波動較大&#xff0c;在市場中獲利并非易事。想要成功&#xff0c;需要理解市場動態和采取適當的策略。萬洲金業將為您提供一些實用的貴金屬交易指南&#xff0c;幫助您在市場中獲利。 …

PostgreSQL create or replace view和重建視圖 有什么區別?

一、 replace vs 重建 遇到開發提了個問題&#xff0c;create or replace view和重建視圖&#xff08;dropcreate&#xff09;有什么區別&#xff0c;查詢資料整理了一下。 1. create or replace 當存在同名視圖時&#xff0c;嘗試將其替換新視圖語句必須與現有視圖查詢具有相…

LeetCode算法題解(動態規劃,背包問題)|LeetCode1049. 最后一塊石頭的重量 II、LeetCode494. 目標和

一、LeetCode1049. 最后一塊石頭的重量 II 題目鏈接&#xff1a;1049. 最后一塊石頭的重量 II 題目描述&#xff1a; 有一堆石頭&#xff0c;用整數數組 stones 表示。其中 stones[i] 表示第 i 塊石頭的重量。 每一回合&#xff0c;從中選出任意兩塊石頭&#xff0c;然后將…

springboot2.1升級到2.7 actuator丟失部分metrics端點

項目場景&#xff1a; 項目需要升級springboot從2.1升級至2.7 問題描述 發現之前的metrics后面的jvm相關的端口丟了 原因分析&#xff1a; 找到這樣一篇博文https://blog.csdn.net/CL_YD/article/details/120309094&#xff0c;這篇博文意思是對的&#xff0c;但是寫的不太好…