int列表的Java组合

int列表的Java组合,java,list,int,combinations,Java,List,Int,Combinations,我需要为java中给定的一组整数生成一个所有不同组合的列表 示例如下: 所以一个1,2,3的列表会给我 [], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3] 您试图实现的是幂集,即组的所有子集的集合,包括空集和组本身 以下是java中一种可能的迭代实现: public static <T> List<List<T>> powerset(Collection<T> list) { List<List

我需要为java中给定的一组整数生成一个所有不同组合的列表

示例如下:

所以一个
1,2,3
的列表会给我

[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]

您试图实现的是幂集,即组的所有子集的集合,包括空集和组本身

以下是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;
}
公共静态列表电源集(收集列表){
List ps=new ArrayList();
ps.add(new ArrayList());//添加空集
//对于原始列表中的每个项目
对于(T项:列表){
List newPs=newarraylist();
用于(列表子集:ps){
//复制当前电源集的所有子集
添加(子集);
//加上附加有当前项的子集
List newSubset=newarraylist(子集);
新增(项目);
newPs.add(newSubset);
}
//powerset现在是list.subList(0,list.indexOf(item)+1)的powerset
ps=新ps;
}
返回ps;
}

这是一个很好的自我锻炼。关于这个问题,有很多类似的问题。