Я нашел здесь рекурсивное решение:
https://stackoverflow.com/a/16256122/10929764
но это только распечатывает комбинации. Я попытался изменить его, чтобы он возвращал все комбинации в виде ArrayList, но он не работает.
Вот код:
public ArrayList<String[]> comb2(ArrayList<String>arr, int len, int startPosition, String[] result, ArrayList<String[]> allResults){
if (len == 0){
System.out.println(Arrays.toString(result));
allResults.add(result);
return allResults;
}
for (int i = startPosition; i <= arr.size()-len; i++){
result[result.length - len] = arr.get(i);
comb2(arr, len-1, i+1, result,allResults);
}
return allResults;
}
Правильно распечатывает все комбинации:
[A, B, C] [A, B, D] [A, B, E] [A, C, D] [A, C, E] [A, D, E] [B, C, D]
[B, C, E] [B, D, E] [C, D, E]
но когда я распечатываю allResults, которые ранее были возвращены методом comb2, я получаю:
[C, D, E] [C, D, E] [C, D, E] [C, D, E] [C, D, E] [C, D, E] [C, D, E]
[C, D, E] [C, D, E] [C, D, E]