解题思路:
对于已有的每一种排列的每个位置k,插入第i个新数字ss[i],得到一组新排列
详见注释
#=============================================================================================
'''
# -*- coding:utf-8 -*-
class Solution:
def Permutation(self, ss):
# write code here
n = len(ss)
if n<=0:
return
if n==1:
return ss
ss = list(ss) # 输入转成list(list才有insert方法)
out = []
out.append([ss[0]]) # i-1时已有的排列(二维数组)
for i in range(1,n):
tmp = []
for string in out: # 对于已有的每一种排列
for k in range(len(string)+1): # 当前排列的每个位置k
s = string.copy() # 复制当前排列
s.insert(k,ss[i]) # 在复制排列的第k个位置,插入第i个数ss[i]
tmp.append(s) # 得到一组新排列加入临时二维数组
out = tmp # 更新i-1时已有的排列
for i in range(len(out)):
out[i] = ''.join(out[i]) # 数组合成一个对象用于set()去重,再排序
out = sorted(set(out)) # set的元素只能是单个变量,不能是数组等多变量对象
#print(out)
return out
s = Solution()
ss = '121' # ['ab','ba']
print(s.Permutation(ss))