【发布时间】:2015-07-06 18:23:19
【问题描述】:
现在我正在尝试编写一个函数,它接受一个数组和一个整数 n,并给出每个大小 n 组合的列表(因此是一个 int 数组列表)。我可以使用 n 个嵌套循环来编写它,但这仅适用于特定大小的子集。我无法弄清楚如何将其概括为适用于任何规模的组合。我想我需要使用递归?
这是 3 个元素的所有组合的代码,我需要一个用于任意数量元素的算法。
import java.util.List;
import java.util.ArrayList;
public class combinatorics{
public static void main(String[] args) {
List<int[]> list = new ArrayList<int[]>();
int[] arr = {1,2,3,4,5};
combinations3(arr,list);
listToString(list);
}
static void combinations3(int[] arr, List<int[]> list){
for(int i = 0; i<arr.length-2; i++)
for(int j = i+1; j<arr.length-1; j++)
for(int k = j+1; k<arr.length; k++)
list.add(new int[]{arr[i],arr[j],arr[k]});
}
private static void listToString(List<int[]> list){
for(int i = 0; i<list.size(); i++){ //iterate through list
for(int j : list.get(i)){ //iterate through array
System.out.printf("%d ",j);
}
System.out.print("\n");
}
}
}
【问题讨论】:
-
这个 SO 问题可能会对您有所帮助 [Finding powerset][1] [1]:stackoverflow.com/questions/1670862/…
标签: java combinations combinatorics