Прямо сейчас я пытаюсь написать функцию, которая принимает массив и целое число n, и дает список каждой комбинации размера n (так что список массивов int). Я могу написать его, используя n вложенных циклов, но это работает только для определенного размера подмножества. Я не могу понять, как обобщить его для работы с любым размером комбинации. Я думаю, мне нужно использовать рекурсию?Алгоритм для получения всех комбинаций размера n из массива (Java)?
Это код для всех комбинаций из 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");
}
}
}
Это ТАК вопрос может помочь вам [Нахождение Powerset] [1] [1]: http://stackoverflow.com/questions/1670862/obiving-a-powerset-of-a-set-in-java – harshad