题解 | #字符串的排列#

字符串的排列

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

回溯,用set去重

# -*- coding:utf-8 -*-
from collections import Counter
class Solution:
    def Permutation(self, ss):
        # write code here
        arr = [c for c in ss]
        n = len(arr)
        if n <= 1:
            return [ss]
        res = set()
        hashMap = Counter(arr)
#         print("hashMap:", hashMap)
        def backtrack(arr, idx, track):
            if len(track) == len(arr):                
                res.add(''.join(track))
                return
            for i in range(0, len(arr)):
#                 print("track:", track)
#                 print("hashMap:", hashMap, "value:", hashMap.get(arr[i], 0))
                if i == idx or hashMap.get(arr[i], 0) == 0:
#                     print("bingo")
                    continue
                track.append(arr[i])
                hashMap[arr[i]] -= 1
                backtrack(arr, i, track)
                track.pop()
                hashMap[arr[i]] += 1
            return 
        backtrack(arr, -1, [])
        return sorted(list(res))
全部评论
我感觉面试时不能直接用sorted()
点赞 回复 分享
发布于 2021-07-20 12:14

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务