寫這個系列是因為紀念一下去年的今天,就是2023年的9月14號,刷題第一天,今天是一週年紀念日。當時只敢做easy還得抄答案的我想啥時候能做上medium啊,事到如今,感覺都不是啥障礙了,這道題也已經做了第四遍了,抽出來的dfs遞迴模板放在這裡總結一下。
這題內容就是就是給個陣列,裡面的數字都是獨一無二的,把它所有的子集都輸出出來。
題目中給了個例子,比如[1,2,3]
,第一次抽出1,然後在1的基礎上加2,再加3。加完之後再往回返,去掉3,再去掉2,發現可以加3,形成[1,3]
,再到2,以此類推。
思路很容易,但是寫的時候需要用到遞迴的手法,這個還是需要點兒思維過程的,推薦用ide的debug功能一步一步走走看。
public class subsets
public void dfs(list> result, listlist, int start, int nums)
}}
演算法課講過,這個複雜度是指數次,能實現出來就行了,沒法優化。
這題就是模板,dfs的模板,就是乙個容器來回抓,容器的容器每次把這個容器記錄下來。還有遞迴的debug就是人工模仿ide,一步一步走。
稍有不同,就是陣列裡面的數字可能有重複,同時要求子集輸出不能用重複的元素,乙個非常典型的follow up。
重點在於判斷重複數字,把重複的情況跳過去。模板還是一樣的。
public class subsetsii
public void dfs(list> result, listlist, int start, int nums)
}}
不分析了,反正指數次。
這裡注意用好模板,迴圈的時候把起始的start寫成了0,直接就爆了。
Subsets1解題報告
問題描述 given a set of distinct integers,nums,return all possible subsets.note the solution set must not contain duplicate subsets.for example,if nums 1,...
javascript 組合總和LeetCod 39
給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 所有數字 包括 target 都是正整數。解集不能包含重複的組合。示例 1 輸入 candid...
javascript 四數之和LeetCod 18
給定乙個包含 n 個整數的陣列nums和乙個目標值target,判斷nums中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與target相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。var foursum function nums,target 先...