leetcode刷题-47全排列2

题目

给定一个可包含重复数字的序列,返回所有不重复的全排列。

思路

其思路与46题完全一致,但是需要与组合总和2题一般,在同一层取出重复元素。因此可以在每一层设置一个set()类型,将访问过的元素放入其中,禁止相同元素在同一层被提取。

实现

class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        result = []
        def backtrack(num, tmp):
            if not num :
                result.append(tmp)
                return
            visited = set() 
            for i in range(len(num)):
                if num[i] in visited: continue
                backtrack(num[:i] + num[i+1:], tmp + [num[i]])
                visited.add(num[i])
        backtrack(nums, [])
        return result

 

posted @ 2020-08-03 10:30  maoguai  阅读(86)  评论(0编辑  收藏  举报