给定一个可包含重复数字的序列 nums
,按任意顺序 返回所有不重复的全排列。
示例 1:
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
示例 2:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
提示:
1 <= nums.length <= 8
-10 <= nums[i] <= 10
解题思路:
解题方法同46 全排列。另外,要解决重复问题,需要引入一个visited集合。
Python代码:
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
def helper(ans):
if l == len(ans):
res.append(ans[:])
return None
visited = set()
for i in range(l):
if not used[i]:
if nums[i] in visited:
continue
visited.add(nums[i])
used[i] = 1
ans.append(nums[i])
helper(ans)
ans.pop()
used[i] = 0
res = []
sorted(nums)
l = len(nums)
used = [0 for i in range(l)]
helper([])
return res