Python|在不使用递归的情况下按字典顺序排列字符串的所有排列
编写一个Python程序以按字典顺序打印字符串的所有排列。
例子:
Input : python
Output : hnopty
hnopyt
hnotpy
hnotyp
hnoypt
......
ytpnho
ytpnoh
ytpohn
ytponh
Input : xyz
Output : xyz
xzy
yxz
yzx
zxy
zyx
方法一:
使用默认库 itertools函数排列。
permutations函数将创建给定字符串的所有排列,然后我们对结果进行排序以获得所需的输出。
from itertools import permutations
def lexicographical_permutation(str):
perm = sorted(''.join(chars) for chars in permutations(str))
for x in perm:
print(x)
str ='abc'
lexicographical_permutation(str)
输出 :
abc
acb
bac
bca
cab
cba
方法二:
# import library
from math import factorial
def lexicographical_permutations(str):
# there are going to be n ! permutations where n = len(seq)
for p in range(factorial(len(str))):
print(''.join(str))
i = len(str) - 1
# find i such that str[i:] is the largest sequence with
# elements in descending lexicographic order
while i > 0 and str[i-1] > str[i]:
i -= 1
# reverse str[i:]
str[i:] = reversed(str[i:])
if i > 0:
q = i
# find q such that str[q] is the smallest element
# in str[p:] such that str[q] > str[i - 1]
while str[i-1] > str[q]:
q += 1
# swap str[i - 1] and str[q]
temp = str[i-1]
str[i-1]= str[q]
str[q]= temp
s = 'abcd'
s = list(s)
s.sort()
lexicographical_permutations(s)
输出 :
abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba