摘要:題目要求類似的題目有可以參考這篇博客可以參考這篇博客思路一遞歸還是利用遞歸的方式,在前一種情況的基礎(chǔ)上遍歷下一輪的組合情況。
題目要求
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,2,3], a solution is: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
類似的題目有:
leetcode60 Permutation Sequence 可以參考這篇博客
leetcode77 Combinations 可以參考這篇博客
還是利用遞歸的方式,在前一種情況的基礎(chǔ)上遍歷下一輪的組合情況。
public List思路2:排序后循環(huán)> subsets(int[] nums) { List
> result = new ArrayList
>(); result.add(new ArrayList
()); subsets(result, nums, 0, new ArrayList ()); return result; } public void subsets(List > result, int[] nums, int startIndex, List
currentList){ if(startIndex == nums.length){ return; } while(startIndex (currentList)); subsets(result, nums, startIndex, currentList); currentList.remove(currentList.size()-1); } }
起始subset集為:[]
添加S0后為:[], [S0]
添加S1后為:[], [S0], [S1], [S0, S1]
添加S2后為:[], [S0], [S1], [S0, S1], [S2], [S0, S2], [S1, S2], [S0, S1, S2]
public List> subsets(int[] S) { List
> res = new ArrayList<>(); res.add(new ArrayList
()); for(int i : S) { List > tmp = new ArrayList<>(); for(List
sub : res) { List a = new ArrayList<>(sub); a.add(i); tmp.add(a); } res.addAll(tmp); } return res; }
想要了解更多開發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號!將會(huì)不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67306.html
摘要:描述解釋就是普通的動(dòng)態(tài)規(guī)劃吧,找準(zhǔn)規(guī)律,所有數(shù)字過一遍,每個(gè)數(shù)字都有添加和不被添加兩種情況,所有情況的綜合 描述 Given a set of distinct integers, nums, return all possible subsets(the power set). Note: The solution set must not contain duplicate sub...
摘要:題目給定一組不含重復(fù)元素的整數(shù)數(shù)組,返回該數(shù)組所有可能的子集冪集。說明解集不能包含重復(fù)的子集。示例輸入輸出題解全排列,部分排列這些問題都是回溯的題目。這個(gè)題目每個(gè)狀態(tài)都是解,包括空也是解,所以直接都加進(jìn)去就好。 題目 給定一組不含重復(fù)元素的整數(shù)數(shù)組 nums,返回該數(shù)組所有可能的子集(冪集)。 說明:解集不能包含重復(fù)的子集。 示例: 輸入: nums = [1,2,3] 輸出: [ ...
摘要:題目給定一組不含重復(fù)元素的整數(shù)數(shù)組,返回該數(shù)組所有可能的子集冪集。說明解集不能包含重復(fù)的子集。示例輸入輸出題解全排列,部分排列這些問題都是回溯的題目。這個(gè)題目每個(gè)狀態(tài)都是解,包括空也是解,所以直接都加進(jìn)去就好。 題目 給定一組不含重復(fù)元素的整數(shù)數(shù)組 nums,返回該數(shù)組所有可能的子集(冪集)。 說明:解集不能包含重復(fù)的子集。 示例: 輸入: nums = [1,2,3] 輸出: [ ...
摘要:通用算法思路總結(jié)初始結(jié)果列表??赡芤獙?shù)集排序,方便處理重復(fù)元素的情況。書寫遞歸函數(shù),先要考慮原點(diǎn)狀況,一般就是考慮什么情況下要將當(dāng)前結(jié)果添加到結(jié)果列表中。每當(dāng)一個(gè)元素添加到當(dāng)前結(jié)果中之后,要再調(diào)用遞歸函數(shù),相當(dāng)于固定了前綴窮舉后面的變化。 通用算法思路總結(jié): 初始結(jié)果列表。 可能要將數(shù)集排序,方便處理重復(fù)元素的情況。 調(diào)用遞歸函數(shù)。 書寫遞歸函數(shù),先要考慮原點(diǎn)狀況,一般就是考慮什么...
摘要:回溯算法在算法過程中就是類似于枚舉算法,嘗試在搜索過程中找到問題的解。 回溯算法( BackTrack )在算法過程中就是類似于枚舉算法,嘗試在搜索過程中找到問題的解。 使用回溯算法解題的一般步驟 使用回溯算法解題的一般步驟: 針對所給問題得出一般的解空間 用回溯搜索方法搜索解空間 使用深度優(yōu)先去搜索所有解并包含適當(dāng)?shù)募糁Σ僮? LeetCode 使用回溯算法的題目主要有 36 題,...
閱讀 2262·2021-11-22 14:56
閱讀 10079·2021-09-08 10:45
閱讀 1982·2019-08-30 13:54
閱讀 2871·2019-08-29 16:54
閱讀 2012·2019-08-29 14:20
閱讀 1779·2019-08-29 12:25
閱讀 1859·2019-08-29 12:17
閱讀 1054·2019-08-23 18:29