Java - Как найти перестановку всех значений в одномерном массиве и сохранить их в двумерном массиве - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу создать метод, в котором при задании одномерного массива он найдет все перестановки значений в этом массиве и превратит его в двухмерный массив. Я нашел в Интернете некоторые алгоритмы, которые находят все перестановки, но выводят только значения в виде 2-мерного массива ( пример ), но я не мог полностью изменить код, чтобы сохранить выходные данные в одном 2d массив. Спасибо за любую помощь, спасибо.

1 Ответ

0 голосов
/ 06 ноября 2018

Вот как бы я это сделал - адаптировано по ссылке в вашем вопросе:

import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;

// Java program to calculate all permutations using 
// Heap's algorithm 
class HeapAlgo 
{ 
    List<int[]> heapPermutation(int a[]) {
        LinkedList<int[]> list = new LinkedList<int[]>();
        heapPermutation(a, a.length, a.length, list);
        return list;
    }

    //Generating permutation using Heap Algorithm 
    void heapPermutation(int a[], int size, int n, List<int[]> list) 
    { 
        // if size becomes 1 then adds the obtained 
        // permutation to the list
        if (size == 1) 
            list.add(a.clone());

        for (int i=0; i<size; i++) 
        { 
            heapPermutation(a, size-1, n, list); 

            // if size is odd, swap first and last 
            // element 
            if (size % 2 == 1) 
            { 
                int temp = a[0]; 
                a[0] = a[size-1]; 
                a[size-1] = temp; 
            } 

            // If size is even, swap ith and last 
            // element 
            else
            { 
                int temp = a[i]; 
                a[i] = a[size-1]; 
                a[size-1] = temp; 
            } 
        } 
    } 

    // Driver code 
    public static void main(String args[]) 
    { 
        HeapAlgo obj = new HeapAlgo(); 
        int a[] = {1,2,3}; 
        List<int[]> list = obj.heapPermutation(a);
        for(Iterator<int[]> i = list.iterator(); i.hasNext();) {
            int[] array = i.next();
            for(int j = 0; j < array.length; j++) {
                System.out.print(array[j] + " ");
            }
            System.out.println();
        }
    } 
} 

// Based on code contributed by Amit Khandelwal.

Другой подход заключается в создании массива int[] массивов. Длина будет факториалом длины a. Вы можете создать класс стека, который отслеживает самый низкий пустой индекс, чтобы добавить следующую перестановку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...