Перестановка более чем одной строки разной длины в Java? - PullRequest
0 голосов
/ 02 октября 2018
string1 = "ABC" 
string2 = "DEF" 
string3 = "GHIJ"

Выход: «ADG», «ADH», «ADI», «ADJ», «AEG», «AEH», «AEI», «AEJ», «AFG», «AFH», "AFI", "AFJ" одинаково для b и c Использование рекурсивного подхода было бы очень полезно ..

1 Ответ

0 голосов
/ 03 октября 2018

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

static void permute(String... str)
{    
  char[][] chars = new char[str.length][];
  for(int i=0; i<str.length; i++)
    chars[i] = str[i].toCharArray();

  int[] idx = new int[str.length];

  char[] perm = new char[str.length];    
  for(int i=0; i<str.length; i++)
    perm[i] = chars[i][0];

  while(true)
  {      
    System.out.println(new String(perm));

    int k=str.length-1;
    for(; k>=0; k--)
    {
      idx[k] += 1;
      if(idx[k] < chars[k].length) 
      {
        perm[k] = chars[k][idx[k]];
        break;
      }
      idx[k] = 0;
      perm[k] = chars[k][idx[k]];
    }
    if(k < 0) break;
  }
}

Тест:

public static void main(String[] args)
{
  permute("ABC", "DEF", "GHIJ");
}

Выход:

ADG
ADH
ADI
ADJ
AEG
AEH
AEI
<snip>
CFG
CFH
CFI
CFJ
...