我需要为java中的给定整数组生成所有不同组合的列表。
此处示例:
https://www.wolframalpha.com/input/?i=combinations+of+%7B1%2C2%2C3%7D
所以1,2,3
列表会给我
[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]
答案 0 :(得分:1)
你试图实现它的权力集,这意味着一组的所有子集的集合,包括空集和组本身。
这是java中一种可能的迭代实现:
public static <T> List<List<T>> powerset(Collection<T> list) {
List<List<T>> ps = new ArrayList<List<T>>();
ps.add(new ArrayList<T>()); // add the empty set
// for every item in the original list
for (T item : list) {
List<List<T>> newPs = new ArrayList<List<T>>();
for (List<T> subset : ps) {
// copy all of the current powerset's subsets
newPs.add(subset);
// plus the subsets appended with the current item
List<T> newSubset = new ArrayList<T>(subset);
newSubset.add(item);
newPs.add(newSubset);
}
// powerset is now powerset of list.subList(0, list.indexOf(item)+1)
ps = newPs;
}
return ps;
}