要求:給定乙個含不同整數的集合,返回其所有的子集
注意事項:子集中的元素排列必須是非降序的,解集必須不包含重複的子集。 樣例
如果 s =[1,2,3]
,有如下的解:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
]
思路:不考慮非降序,乙個個數字插進去,每一層插進去乙個,每乙個都有兩種情況,加進去和不加進去。就是遍歷陣列裡面所有的元素,每次取出第乙個list,往裡面加入,或者不加入,就有了兩種情況的list產生,再把這兩種list加進去,依次迴圈。
這樣的做法是降序的,不符合題意,但是在此處還是貼一下**。
public class solution
res.add(list);
for(int i=0;itemp=res.get(0);
res.remove(0);
arraylisttemp2=new arraylist(temp);
temp2.add(temp2.size(),nums[i]);
res.add(temp2);
res.add(temp);}}
return res;}}
我們看到上面**的錯誤樣例如下:
輸入
[4,1,0]
輸出
[,[0],[1],[1,0],[4],[4,0],[4,1],[4,1,0]]
期望答案
[,[0],[0,1],[0,1,4],[0,4],[1],[1,4],[4]]
為什麼會這樣子呢,其實非降序這個要求只是乙個幌子,我們只要在加入之前對陣列進行排序就可以通過啦。
**如下:
public class solution
res.add(list);
arrays.sort(nums);
for(int i=0;itemp=res.get(0);
res.remove(0);//把第乙個取出來
arraylisttemp2=new arraylist(temp);
temp2.add(temp2.size(),nums[i]);
res.add(temp2);//加入乙個數,放進去
res.add(temp);//不加數,放進去}}
return res;}}
如果有所幫助,臉皮厚求個贊~
技術之路不在一時,山高水長,縱使緩慢,馳而不息。
lintcode 子集問題
這裡的子集問題是指給定乙個列表求它的所有不重複子集的問題。這個問題分為兩類 一類是所給列表包含重複元素,另一類是所給列表不含重複元素。分別對應lintcode中17和18題。這裡使用深度優先搜尋的思想,遞迴求解。class solution 排序 sort nums.begin nums.end 遞...
LeetCode第78題 子集
給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 幫助理解 newsets 1 2 2 1,2 3 3 1,3 3 1,3 2,3 3 1,3 2,3 1,2...
LeetCode第78題子集
題目描述 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。解題思路 對於backtrack函式 1 新增結果 2 for語句,在選擇列表中選擇 做選擇 templist.add nums i 回溯,進入下一層 backtrack list,te...