python dfs 回溯

字符串的排列

http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7

先自己写的,然后看了看别人写的,和我都不是一个思路,还有点太复杂,那我也写一写吧。我用到了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
全部评论
好yxc的写法~
点赞 回复 分享
发布于 2021-01-15 16:09

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务