题解 | #字符串的排列#

字符串的排列

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

含有重复元素的全排列: 排序+剪枝(连续重复元素看作整体使用)

class Solution:
    def Permutation(self , str: str) -> List[str]:
        # write code here
        n = len(str)
        str = sorted(str) # 提前排序
        used = [False]*n
        ret = []
        curr = ''
        def backtrace():
            nonlocal curr # 使用外部嵌套函数的变量
            if len(curr)==n:
#                 ret.append(copy.copy(curr))
                ret.append(curr[:]) # 也可以使用[:]进行拷贝
            for i in range(n):
                if used[i]:
                    continue
                if i>0 and str[i]==str[i-1] and not used[i-1]: # 重复元素,前一个使用时才使用,看作一个整体只使用一次
                    continue
                used[i] = True
                curr += str[i]
                backtrace()
                curr = curr[:-1] # 切片删除字符串尾巴
                used[i] = False
            return
        backtrace()
        return ret
全部评论

相关推荐

大专境巅峰电子狗:头一次看到这种简历,学术与技术学习,直接用技能概括就好了呀,实习经历要写丰富一点
点赞 评论 收藏
分享
10-14 12:20
门头沟学院 Java
迷茫的大四🐶:摊牌了,我是25届的,你们也不招我
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务