对于集合里面的任何一个元素,有两种可能,一种是在子集合里,另一种是不在子集合里。在子集合里的话用1表示,不在的话用0表示,那么一个集合的子集合都可以用二进制表示,假设集合为{1,2,3},那么可以用下列二级制表示:000,001,010,011......共有2^n种表示。
static ArrayList<ArrayList<Integer>> getSubsets2(ArrayList<Integer> set){
ArrayList<ArrayList<Integer>> allsubsets = new ArrayList<ArrayList<Integer>>();
int max = 1 << set.size(); //how many sub sets
for(int i=0; i<max; i++){
int index = 0;
int k = i;
ArrayList<Integer> s = new ArrayList<Integer>();
while(k > 0){
if((k&1) > 0){
s.add(set.get(index));
}
k>>=1;
index++;
}
allsubsets.add(s);
}
return allsubsets;
}
public static void main(String[] args){
ArrayList<Integer> s = new ArrayList<Integer>();
s.add(1);
s.add(2);
s.add(3);
ArrayList<ArrayList<Integer>> allsubsets = getSubsets2(s);
for(ArrayList<Integer> set : allsubsets){
System.out.println(set);
}
}`
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。