Repository navigation
Expand file tree
/
Copy pathSubsets.java
More file actions
49 lines (47 loc) · 1.67 KB
/
Copy pathSubsets.java
File metadata and controls
49 lines (47 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class Solution {
public ArrayList<ArrayList<Integer>> subsets(int[] S) {
ArrayList<ArrayList<Integer>> res;
res = getSubsets2(S, 0);
return res;
}
private ArrayList<ArrayList<Integer>> getSubsets(int[] S, int index){
ArrayList<ArrayList<Integer>> res;
if(index == S.length){
res = new ArrayList<ArrayList<Integer>>();
res.add(new ArrayList<Integer>());
}else{
res = getSubsets(S, index + 1);
int item = S[index];
ArrayList<ArrayList<Integer>> moreSubsets = new ArrayList<ArrayList<Integer>>();
for(ArrayList<Integer> subset: res){
ArrayList<Integer> newSubset = new ArrayList<Integer>();
newSubset.add(item);
newSubset.addAll(subset);
moreSubsets.add(newSubset);
}
Collections.reverse(moreSubsets);
res.addAll(moreSubsets);
}
return res;
}
private ArrayList<ArrayList<Integer>> getSubsets2(int[] S, int index){
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
int max = 1 << S.length; // compute 2^n
for(int i = 0; i < max; i++){
ArrayList<Integer> subset = convertIntToSet(i, S);
res.add(subset);
}
return res;
}
private ArrayList<Integer> convertIntToSet(int x, int[] S){
ArrayList<Integer> subset = new ArrayList<Integer>();
int index = 0;
for(int i = x; i > 0; i>>=1){
if((i & 1) == 1){
subset.add(S[index]);
}
index++;
}
return subset;
}
}