题解 | #字符串的排列#

字符串的排列

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

回溯法

  • lc46. 全排列 的不同:需要对同一个节点的子节点剪枝(去重)
# -*- coding:utf-8 -*-
class Solution:
    def Permutation(self, ss):
        # write code here
        def dfs(ss,size,depth,path,used,res):
            if depth==size:
                res.append(''.join(path))
                return
            depth_set=set() # 父节点的所有孩子节点的值
            for i in range(size):
                if not used[i]:
                    if ss[i] in depth_set:continue # 剪枝
                    depth_set.add(ss[i])
                    used[i]=True
                    path.append(ss[i])
                    dfs(ss,size,depth+1,path,used,res)
                    used[i] = False
                    path.pop()

        size = len(ss)
        ss = list(ss)
        if size == 0:return []
        if size ==1 : return [ss[0]]

        res = []
        used  = [False]*size
        dfs(ss,size,0,[],used,res)
        return res
全部评论
用时只超过了33.63%,求大佬们提出优化点
点赞 回复 分享
发布于 2021-09-28 20:12

相关推荐

把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务