leetcode--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],
  []
]

 

Discuss

 

public class Solution {
    public List<List<Integer>> subsets(int[] S) {
       Arrays.sort(S);
		List<List<Integer> > result = new ArrayList<List<Integer>>();
		int largest = (int)Math.pow(2, S.length);
		for(int j = 0; j < largest; ++j){
			String binary = Integer.toBinaryString(j);
			List<Integer> aSubSet = new ArrayList<Integer>();
			int length = binary.length();
			for(int i = length - 1; i > -1; --i){
				if(binary.charAt(i) - '0' == 1)
					aSubSet.add(S[length - 1 - i]);
			}
			result.add(aSubSet);
		}
		return result;
    }
}

  

 Another method which can be generalized to Subsets II.

public class Solution {
    public List<List<Integer>> subsets(int[] S) {
       Arrays.sort(S);
		List<List<Integer> > result = new ArrayList<List<Integer> >();
		int length = S.length;
		List<Integer> aSubset = new ArrayList<Integer>();
		result.add(aSubset);
		int size = 1;
		for(int i = 0; i < length; ++i){
			for(int j = 0; j < size; ++j){
				List<Integer> newList = new ArrayList<Integer>();
				newList.addAll(result.get(j));
				newList.add(S[i]);
				result.add(newList);
			}
			size *= 2;
		}
		return result;
    }
}

  

posted @ 2014-02-02 11:20  Averill Zheng  阅读(143)  评论(0编辑  收藏  举报