Генерация всех уникальных перестановок - PullRequest
1 голос
/ 23 февраля 2012

Я работаю над проблемой, в которой мне дано число, и мне нужно найти все возможные перестановки цифр в этом числе.Например, если мне дадут 20, ответ будет: 20 и 02.Я знаю, что существует n! возможных перестановок, и я разделил числа так, чтобы каждая цифра была элементом в массиве.Мой вопрос: как я могу пройти через этот массив, чтобы генерировать каждую возможную комбинацию числа длиной не менее 2 цифр, но не более 6.

Ответы [ 2 ]

5 голосов
/ 23 февраля 2012

Подсказка:

Как бы вы решили эту проблему для однозначного числа?

Теперь, как бы вы решили эту проблему, если у вас есть ответ на предыдущий вопросдля двузначного числа?

2 голосов
/ 23 февраля 2012

Скажем, n отдельные цифры находятся в массиве длиной n. Тогда проблема генерации перестановок сводится к:

  1. Выбор одной из n цифр в качестве первой цифры для печати. ​​
  2. Перестановка оставшихся n-1 цифр.

рекурсия.

Псевдокод для такой рекурсивной функции permute будет выглядеть примерно так:

List permute (Array digits)
{
  List permutations = /* initialize an empty list */

  for (i=0; i<n; i++)
    {
      firstDigit = digit[i];
      Array otherDigits = /* array containing all digits except firstDigit.  */
      List subPermutations = permute(otherDigits);
      /* prepend firstDigit into each element of 'subPermutations' */
      /* add all elements of 'subPermutations' to the list 'permutations' */
    }
  return permutations;
}

Затем просто позвоните permute и распечатайте список или сделайте с ним что-нибудь еще.

РЕДАКТИРОВАТЬ: вам также нужно обрабатывать край край permute с 1 цифрой.

Я думаю, что это уже слишком много информации для "домашней работы":)

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