Перестановки - 2
Дана строка, состоящая из N символов. Требуется вывести все перестановки символов данной строки.
Входные данные Входной файл INPUT.TXT содержит строку, состоящую из N символов (1 ≤ N ≤ 8), символы - буквы английского алфавита и цифры.
Выходные данные В выходной файл OUTPUT.TXT выведите в каждой строке по одной перестановке. Перестановки можно выводить в любом порядке. Повторений и строк, не являющихся перестановками исходной, быть не должно.
https://acmp.ru/index.asp?main=task&id_task=355 не пропускает код
alphabet = input()
starting_perm = ''
def premuate(perm, alphabet):
if not alphabet:
print(perm + alphabet)
else:
for i in range(len(alphabet)):
premuate(perm + alphabet[i], alphabet[0:i] + alphabet[i + 1:])
premuate(starting_perm, alphabet)
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Реализация next_permutation. Алгоритм корректно обрабатывает входные последовательности с повторами
def nextperm(seq):
i = len(seq) - 2
while i >= 0 and seq[i] >= seq[i+1]:
i -= 1
if i < 0:
return None
j = len(seq) - 1
while seq[j] <= seq[i]:
j -= 1
seq[i], seq[j] = seq[j], seq[i]
seq[i+1:] = reversed(seq[i+1:])
return seq
s = ['1','2','2']
while s:
print(s)
s = nextperm(s)
['1', '2', '2']
['2', '1', '2']
['2', '2', '1']