# -*- coding:utf-8 -*-
class Solution:
def Permutation(self, ss):
# write code here
# 字典序算法
# https://www.cnblogs.com/darklights/p/5285598.html
if not ss:
return []
final_list=[ss]
decrease_list=sorted(list(ss), reverse=True)
increase_list=sorted(list(ss))
ss = increase_list
# 直到降序排列才终止循环
while ss != decrease_list:
# 1.从右往左找第一个逆序对ss[i]<ss[i+1],记录下位置
for i in list(reversed(range(len(ss)-1))):
if ss[i]<ss[i+1]:
flagi=i
break
# 2.从右往左找第一个比ss[flagi]小的值,记录下位置
for j in list(reversed(range(flagi, len(ss)))):
if ss[j]>ss[flagi]:
flagj=j
break
# 3.交换flagi 和 flagj的值
ss[flagi], ss[flagj] = ss[flagj], ss[flagi]
# 4.对flagi之后的序列排序
ss=ss[:flagi+1] + sorted(ss[flagi+1:])
# 恢复成string
final_list.append(''.join(ss))
return final_list