https://oj.leetcode.com/problems/subsets/

http://blog.csdn.net/linhuanmars/article/details/24286377

public class Solution {
    public List<List<Integer>> subsets(int[] S) {
        
        Arrays.sort(S);

        List<List<Integer>> results = new ArrayList<>();
        help(S, 0, new ArrayList<Integer>(), results);
        return results;
    }
    
    private void help(int[] S, int start, List<Integer> items, List<List<Integer>> results)
    {
        if (items.size() <= S.length)
        {
            results.add(new ArrayList<Integer>(items));    
        }
        
        if (items.size() == S.length)
            return;
        
        for (int i = start ; i < S.length ; i ++)
        {
            items.add(S[i]);
            
            help(S, i + 1, items, results);
            
            items.remove(items.size() - 1);
        }
    }
}