78. Subsets

Given a set of distinct integers, S, 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 S = [1,2,3], a solution is:

[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

---
Compare to leet 77, combine
---
public class Solution {
    public ArrayList<ArrayList<Integer>> subsets(int[] S) {
        
        Arrays.sort(S);
        return helper(S, S.length-1);
        
    }
    
    private ArrayList<ArrayList<Integer>> helper(int[] S, int index) {

        if(index < -1) return null;
        
        ArrayList<ArrayList<Integer>> rst;  
        
         // Base case
        if(index == -1){
           rst = new ArrayList<ArrayList<Integer>>();
           rst.add(new ArrayList<Integer>()); // empty set
           return rst;
        }
        
        // recursive
        rst = helper(S, index-1);
        int val = S[index];
        
       ArrayList<ArrayList<Integer>> moreSubset = new ArrayList<ArrayList<Integer>>();
        
        
        for(ArrayList<Integer> subset : rst){
            ArrayList<Integer> newSubset = new ArrayList<Integer>();
            newSubset.addAll(subset);
            newSubset.add(val);
            moreSubset.add(newSubset);
        }
        
        rst.addAll(moreSubset);
        return rst;       
    }
}

 

posted @ 2013-09-15 07:44  LEDYC  阅读(142)  评论(0)    收藏  举报