解题思路:
对于已有的每一种排列的每个位置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))