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

相关推荐

醒工硬件:1学校那里把xxxxx学院去了,加了学院看着就不像本校 2简历实习和项目稍微精简一下。字太多,面试官看着累 3第一个实习格式和第二个实习不一样。建议换行 4项目描述太详细了,你快把原理图贴上来了。比如可以这样描述:使用yyyy芯片,使用xx拓扑,使用pwm控制频率与占空比,进行了了mos/电感/变压器选型,实现了xx功能 建议把技术栈和你做的较为有亮点的工作归纳出来 5熟悉正反激这个是真的吗
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务