Перечислите все возможные перестановки двух элементов вектора в Java - PullRequest
0 голосов
/ 06 мая 2018

Допустим, у нас есть массив целых чисел следующим образом:

int[] sol = new int[] {3, 5, 1, 2, 4};

Я хочу перечислить все возможные массивы, которые могут быть получены при выборе 2 произвольных элементов массива и их замене (т. Е. Если мы поменяем число 3 на число 2, то получим {2, 5, 1, 3, 4}). Для этого случая есть 10 возможных замен 2 элементов.

Как все возможные перечисления могут быть показаны с помощью Java?

1 Ответ

0 голосов
/ 06 мая 2018

Первое, что вам нужно сделать, это выяснить, сколько возможных комбинаций может существовать. В этом случае, так как вы выбираете 2 номера: 3 на 5 3 для 1 3 на 2 3 за 4

5 за 3 5 за 1 5 на 2 5 за 4

и так далее и тому подобное. Поскольку у каждого числа есть 4, другое число может быть в паре с, мы можем вычислить сумму, выполнив следующее уравнение: numberOfElementsInVector * 4. В этом случае мы получаем 20. это означает, что нам нужно выполнить цикл только 20 раз. Нам также нужно отслеживать, какие результаты мы уже собрали. Для этого мы будем хранить строки в ArrayList. Теперь мы сделаем следующий двойной цикл for:

ArrayList<String> results = new ArrayList<>();
for(int i = 0; i < sol.length; i++){
    for(int j = 0; j < sol.length; j++){
        String result = sol[i] + "," + sol[j] + "";
        if(!results.contains(result) && sol[i] != sol[j]){
           results.add(result);
        }
    }
}
System.out.printLn(results.toString());

Этот код будет систематически проходить через любую длину массива и даст вам все 2 комбинации чисел.

...