最后更新于3年前
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
示例 1:
示例 2:
提示:
1 <= nums.length <= 8
-10 <= nums[i] <= 10
在列举结果列表第i个位置时, 如果有多个一样的候选值, 那么只考虑其中一个就可以, 考虑其他几个得到的结果也是一样的, 因此可以剪枝.
在每一层使用一个单独的哈希表来记录本层中哪些值被搜索过, 迭代过程中遇到本层中搜索过的值, 就可以剪枝跳过了.
由于数组中有重复数字, 因此不能再像一样, 而是需要考虑重复情况的剪枝问题.
输入:nums = [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]]
输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
class Solution: def permuteUnique(self, nums: List[int]) -> List[List[int]]: def dfs(path, residual): if len(residual) == 0: results.append(path[:]) seen = set() for i, num in enumerate(residual): if num not in seen: seen.add(num) path.append(num) dfs(path, residual[:i] + residual[i + 1:]) path.pop() results = [] dfs([], nums) return results