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
原文地址:https://www.cnblogs.com/mgdzy/p/13424902.html