在java中,我有一个集合,我想获得它们的联合集合作为主集合的子集的所有可能的组合。 (分割一个集合) 例如: 集合= {1,2,3}得到一个集合的所有可能的分区
结果应该是:
{ {{1,2,3},{}} , {{1},{2,3}} , {{1,2},{3}} , {{1,3},{2}}, {{1},{2},{3}}}
到目前为止的代码:
public static <T> Set<Set<T>> powerSet(Set<T> myset) {
Set<Set<T>> pset = new HashSet<Set<T>>();
if (myset.isEmpty()) {
pset.add(new HashSet<T>());
return pset;
}
List<T> list = new ArrayList<T>(myset);
T head = list.get(0);
Set<T> rest = new HashSet<T>(list.subList(1, list.size()));
for (Set<T> set : powerSet(rest)) {
Set<T> newSet = new HashSet<T>();
newSet.add(head);
newSet.addAll(set);
pset.add(newSet);
pset.add(set);
}
return pset;
}
输出该幂的阵列:
[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
你已经生成了什么代码? –
我可以提取集合的powerset和也只有两个集合的分区,例如只是{{1,2},{3}}和{{1,3},{2}} –
好的,编辑您的文章并给我们的源代码 –