给定一个可包含重复数字的序列 nums
,按任意顺序 返回所有不重复的全排列。
列:
输入:nums = [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]]
class Solution(object):
def permuteUnique(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums.sort() # 进行排序,将重复的元素整合在一起,方便之后的去重操作。
self.res = []
self.recur(nums, [])
return self.res
def recur(self, nums, temp):
if nums == []: # 当待排序的列表为空时,即可录入排序
self.res.append(temp)
return
for i in range(len(nums)):
if i>0 and nums[i] == nums[i-1]: # 当有重复元素时进行跳过
continue
self.recur(nums[:i] + nums[i+1:], temp+[nums[i]]) # 每次按顺序挑出元素,然后对剩
下的元素进行同样的操作,当剩余数组为空时,排序也已完成,然后添加到res当中去。