Поиск всех комбинаций значений массива через рекурсию

Мне необходимо получить комбинации массива Integer[] s = {1, 2, 3}; в следующем виде:

1

2

12

3

13

23

123

Сделать это необходимо через рекурсивную функцию! У меня даже нет идеи как начать, прошу меня простить что даже не привожу код попыток!


Ответы (2 шт):

Автор решения: Sergey Zh.

Код возможно не самый красивый, потому что писал на скорость :)

public static void recursionCombination(String str, int count, Integer[] array, List<Integer> list) {
    for (int i = 0; i < array.length; i++) {
        if (list.contains(array[i])) break;
        System.out.println(new StringBuilder(str + array[i]).reverse().toString());
        if (count < array.length - 1) {
            List<Integer> list1 = new ArrayList<>(list);
            list1.add(array[i]);
            recursionCombination(str + array[i], count+1, array, list1);
        }
    }
}

Вот, это рекурсивный метод. Его нужно будет вызвать из метода main следующими строчками:

    Integer[] s = {1, 2, 3};
    recursionCombination("", 0, s, new ArrayList<>());
→ Ссылка
Автор решения: Neuro

Для этого существует алгоритм порождение подмножеств в рекурсивном виде. Для этого у нас будет функция которая манипулирует списком, и на каждом этапе добавлять и убирать индекс элементов. Во время рекурсии у нас строится дерево подмножеств, где k будет глубиной вот так это примерно будет выглядеть

public static void search(Integer k, ArrayList<Integer> ind,Integer n){
        if (k==n){
            //обработка индексов
        }
        else{
            ind.add(k);
            search(k+1,ind,n);
            ind.remove(ind.size() - 1);
            search(k+1,ind,n);
        }
        return;
    }  
→ Ссылка