Получение всех возможных перестановок строки или комбинации, включая повторяющиеся символы, в Java

Я пытался сгенерировать список всех возможных 4-х символьных строк, которые могли бы состоять из любого заданного набора символов. Я использовал функцию для генерации каждой комбинации из 4 символов из набора символов, но каждый символ используется только один раз. Мне нужны все возможные комбинации с использованием заданного набора символов, например:

String[] elements = {"a", "b", "c", "1", "2", "3"};
int[] indices;
CombinationGenerator x = new CombinationGenerator (elements.length, 4);
StringBuffer combination;
while (x.hasMore ()) {
  combination = new StringBuffer ();
  indices = x.getNext ();
  for (int i = 0; i < indices.length; i++) {
      combination.append (elements[indices[i]]);
  }
  System.out.println (combination.toString ());
}

Использование класса CombinationGenerator из здесь , это вернет каждую уникальную комбинацию из 4 символов, такую ​​как:

'abcd' , 'abc1', 'acb2', 'acb1'

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

'aaaa', 'aaab', 'abc1', 'aac1', '11c2'

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

Любая помощь или даже теория о том, как это можно сделать, были бы полезны.

7
задан Makoto 23 December 2015 в 05:43
поделиться