2015-12-30 3 views
-6

данные проблемы, а = (1,2,3), Ь = (А, В, С), с = (а1, b1, с1)Перестановки в Java

Я хочу, чтобы получить выходной сигнал, который выводит мне значение 1Aa1,1Ab1,1Ac1,1Ba1,1Bb1,1Bc1,1Ca1,1Cb1,1Cc1 Аналогично 2, а затем 3 следует начинать с A, B, C, а затем a1, b1, c1. Данный вывод должен печатать все перестановки и комбинации переменных одного и того же.

Я уже пробовал печатать то же самое в течение цикла, он может генерировать только комбинации, Пробовал несколько учебников по печати перестановок

Может кто-то пожалуйста, помогите мне в этом.

+0

Вам нужен рекурсивный алгоритм, который использует откаты. – TheLostMind

+0

Проверьте [это] (http://stackoverflow.com/questions/2799078/permutation-algorithm-without-recursion-java?lq = 1) – TheLostMind

+0

- это то, что вам нужно: String a [] = {"1", "2", "3"}; \t \t Строка b [] = {"A", "B", "C"}; \t \t Строка c [] = {"a1", "b1", "c1"}; \t \t \t \t для (INT I = 0; I <3; я ++) \t \t { \t \t \t для (Int J = 0; J <3; j ++) \t \t \t { \t \t \t \t для (INT = 0; к <3; K ++) \t \t \t \t {\t \t \t \t \t System.out.println (a [i] + b [j] + c [k]); \t \t \t \t} \t \t \t \t \t \t \t} \t \t} –

ответ

0

Пожалуйста, постарайтесь опубликовать код, который вы пробовали самостоятельно.

Для справки я даю пример кода и некоторые пояснения ниже:

код использует рекурсию и не оптимизировано. Это просто дать вам представление о том, как вы можете работать с рекурсивными проблемами. Функция использует 4 аргумента.

Arg1: это строка, сгенерированная до сих пор.

Arg2: это массив строк, из которого мы можем выбрать кандидата для заполнения следующей позиции.

Arg3: представляет позиции, заполненные до настоящего времени.

Arg4: это длина строки перестановки, которая поможет нам определить, что мы достигли базового варианта, и мы просто напечатаем перестановку и не будем рекурсивно продолжать.

Basic Thought Process Основная идея состоит в том, что мы выберем символ из заданных массивов для каждой позиции и сформируем новую строку, которая исключит этот выбранный элемент и передаст этот вновь созданный набор для дальнейшей рекурсии.

class Test 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     String s[]= {"123","ABC","abc"}; 
     int len = 3; /* Length of the final permutation */ 
     permute ("", s, 0, len); 
    } 


    public static void permute (String soFar, String rest[], int pos, int len) 
    { 

     if (pos == len) { 
      System.out.println (soFar); 
     } else { 

      for (int i = 0; i < rest[pos].length(); i++) { 
       String remaining = rest[pos].substring(0, i) + rest[pos].substring(i+1); 
       String newRest[] = new String[len]; 

       for (int j = 0; j < len; j++) { 
        newRest[j] = new String(rest[j]); 
       } 
       newRest[pos] = new String(remaining); 

       permute (soFar + rest[pos].charAt(i), newRest, pos + 1, len); 
      } 
     } 
    } 
} 

Ссылка взяты из: https://see.stanford.edu/materials/icspacs106b/h19-recbacktrackexamples.pdf

Выход:

1Aa 1AB 1ac 1BA 1BB 1Bc 1CA 1Cb 1cc 2AA 2ab 2AC 2Ва 2BB 2bc 2Ca 2cb 2cc 3AA 3AB 3AC 3BA 3BB 3BC 3СА 3Cb 3CC