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], [] ]
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;
}
}

浙公网安备 33010602011771号