Вы можете сделать это с помощью рекурсии.Здесь я собираюсь добавить код Python для вас.
def heaps_func(a,size):
if size ==1:
a = ''.join(a)
print(a)
return
for i in range(size):
heaps_func(a,size-1)
if size%2==1:
a[0],a[size-1]=a[size-1],a[0]
else:
a[i], a[size - 1] = a[size - 1], a[i]
heaps_func(list('art'),3)
Если данная строка содержит повторяющиеся символы, эта программа также напечатает дублирующий элемент.Например, в строке «arr» «r» содержится два раза.И результат этой программы будет:
arr rar rar arr rra rra
Чтобы избавиться от этого, мы можем использовать список, и перед печатью мы будем искать наэтот список, существует ли этот элемент в списке или нет.Если его не существует, мы распечатаем его и сохраним в списке.
Программы:
def heaps_func(a,size,listofwords):
if size ==1:
a = ''.join(a)
#print(a)
if listofwords.count(a)==0:
print(a)
listofwords.append(a)
return
for i in range(size):
heaps_func(a,size-1,listofwords)
if size%2==1:
a[0],a[size-1]=a[size-1],a[0]
else:
a[i], a[size - 1] = a[size - 1], a[i]
listofwords=[]
heaps_func(list('arr'),len('arr'),listofwords)
для получения подробной информации, пожалуйста, прочитайте следующую ссылку.Но там это описано в C / C ++.
https://www.geeksforgeeks.org/heaps-algorithm-for-generating-permutations/