先自己写的,然后看了看别人写的,和我都不是一个思路,还有点太复杂,那我也写一写吧。我用到了dfs和回溯,语言是python

因为ss中可能有重复的字符,所以不能直接使用not in 这样的表达,所以我另外加了一个flag 标志数组,dfs函数中传递进去,dfs后讲flag变量改回来,这是回溯,而因为有temp 和temp1 所以不用再将temp改回来了,每次将temp1 传进下一次递归,递归出来后继续用temp

感觉自己的代码不够python,还是java 的风格,哈哈,见谅

def Permutation(self, ss):
    """
    字符串的排列顺序,可以用dfs,有个问题,ss 里面可能有重复的数字
    :param ss:
    :return:
    """
    if len(ss) == 0:
        return []
    self.res=[]
    temp=""
    flag=[]
    for i in range(0,len(ss)):
        flag.append(False)
    self.dfs(ss,temp,flag)
    #剔除重复的,不能保证顺序
    #return list(set(self.res))
    res2 = []
    for x in self.res:
        if x not in res2:
            res2.append(x)
    return res2
def dfs(self, ss,temp,flag):
    if len(temp)==len(ss):
        self.res.append(temp)
    else:
        for i in range(0,len(ss)):
            if not flag[i]:
                temp1=temp+ss[i]
                flag[i]=True
                self.dfs(ss,temp1,flag)
                flag[i]=False