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

有重复项数字的所有排列

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
全部评论

相关推荐

09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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