基于交换题解 | #有重复项数字的所有排列#

有重复项数字的所有排列

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

基于回溯法的交换
为了避免重复,每次创建一个集合来统计当前交换数是否已经交换过,交换过就跳过

#
# 
# @param num int整型一维数组 
# @return int整型二维数组
#
class Solution:
    def backtrack(self, num, level, ans):
        if level == len(num):
            ans.append(num[:])
            return 
        seen = set()
        for i in range(level, len(num)):
            if num[i] in seen:
                continue
            seen.add(num[i])
            num[i], num[level] = num[level], num[i]
            self.backtrack(num, level + 1, ans)
            num[i], num[level] = num[level], num[i]

    def permuteUnique(self , num ):
        # write code here
        ans = []
        self.backtrack(num, 0, ans)
        return ans
全部评论

相关推荐

点赞 评论 收藏
分享
仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 11:27
明天又是董事长面,啥时候是个头啊
在太阳里长大的人:公司就仨人吧😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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