Имеет набор chars
[может быть char[]
] и «угадайте», которая является следующей буквой, и добавьте ее к промежуточному sol
StringBuilder, который содержит текущую подстроку. Вызовите алгоритм рекурсивно, чтобы найти следующие символы решения.
Иметь индекс i
, чтобы указать, какие символы можно использовать [все символы "вправо" до i
].
На каждой итерации - выводить полученную строку, даже если вы не указали максимальную длину.
Псевдокод:
findPermutations(chars,i,sol):
print sol
if (chars.length == i):
return
for each j in range(j,chars.length):
sol.append(chars[i+1])
swap(chars,i,j) //we cannot use chars[j] anymore.
findPermutations(chars,j+1,sol)
swap(chars,i,j) //clean up environment
sol.removeLast()
Примечания:
- В этом решении предполагается, что
chars
является набором, поэтому, если определенный символ появляется более одного раза - у вас будут дубликаты, но он все равно будет работать [генерировать все возможности]
- Несколько слов о сложности: существует экспоненциальное количество возможностей, и вам нужны все из них. Итак, если вы попытаетесь вызвать этот метод [и фактически любой алгоритм для его выполнения] с более чем 20 символами, вы должны закончить генерировать все возможности через ~ 200 лет