Перестановки - 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']
→ Ссылка