从数组(Java)中获取大小n的所有组合的算法?[已关闭]
现在,我正在尝试编写一个函数,该函数采用数组和整数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");
}
}
}