[LeetCode][Java] Subsets
阿新 • • 發佈:2017-05-06
sort arrays ++ lee 題意 integer sel duplicate ati
題目:
Given a set of distinct integers, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- 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], [] ]
題意:
給定一個由不同數字組成的數組nums,返回這個數組中的全部的子集。
註意:
1.子集中的元素必須是升序排列
2.終於的結果中不能包括反復的子集。
算法分析:
結合上一題《Combinations》的方法,將上一題作為子函數來使用。
AC代碼:
<span style="font-family:Microsoft YaHei;font-size:12px;">public class Solution { public ArrayList<ArrayList<Integer>> subsets(int[] nums) { ArrayList<ArrayList<Integer>> fres = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> flist= new ArrayList<Integer>(); Arrays.sort(nums); fres.add(flist); for(int i=1;i<=nums.length;i++) { ArrayList<ArrayList<Integer>> sres = new ArrayList<ArrayList<Integer>>(); sres=combine(nums, i); fres.addAll(sres); } return fres; } public static ArrayList<ArrayList<Integer>> combine(int nums[], int k) { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if(nums.length<=0 || nums.length<k) return res; helper(nums,k,0,new ArrayList<Integer>(), res); return res; } private static void helper(int nums[], int k, int start, ArrayList<Integer> item, ArrayList<ArrayList<Integer>> res) { if(item.size()==k) { res.add(new ArrayList<Integer>(item)); return; } for(int i=start;i<nums.length;i++) // try each possibility number in current position { item.add(nums[i]); helper(nums,k,i+1,item,res); // after selecting number for current position, process next position item.remove(item.size()-1); // clear the current position to try next possible number } } }</span>
[LeetCode][Java] Subsets