题目描述
代码
public static void main(String[] args) {
int[] a= {1,2,3};
Set<Set<Integer>> sovle = sovle2(a);
System.out.println(sovle);
}
private static Set<Set<Integer>> sovle(int[] a) {
Set<Set<Integer>> reSet=new HashSet<>();
reSet.add(new HashSet<>());
for (int elem : a) {
Set<Set<Integer>> reNewSet=new HashSet<>();
reNewSet.addAll(reSet);
for (Set<Integer> templeSet : reSet) {
Set cloneSet=(Set)((HashSet)templeSet).clone();
cloneSet.add(elem);
reNewSet.add(cloneSet);
}
reSet=reNewSet;
}
return reSet;
}
private static Set<Set<Integer>> sovle2(int[] a) {
Set<Set<Integer>> reSet=new HashSet<>();
for (int i = (int)Math.pow(2, a.length)-1; i >=0; i--) {
Set zijiSet=new HashSet<Integer>();
for (int j = a.length-1; j >=0; j--) {
if((i>>j&1)==1) {
zijiSet.add(a[j]);
}
}
reSet.add(zijiSet);
}
return reSet;
}