Description
- Permutations II Medium
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
Example
Input: [1,1,2]
Output:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
题意
求一可能含有重复元素的整数数组的所有可能排列
思路1
这题在46. Permutations 排列的基础上加了要求,数组元素可能重复,刚开始的思路就是直接加一个判断条件,如果path不在res中,才能加入结果列表res中。当然,这样做的效率不高。
code
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
res= []
self.dfs(nums, res, [])
return res
def dfs(self, nums, res, path):
for i in range(len(nums)):
self.dfs(nums[:i]+nums[i+1:], res, path+[nums[i]])
if len(nums) == 0:
if path not in res:
res.append(path)
思路2
先将该数组排序,以确保相同元素是挨在一起且连续的,然后遍历时判断该数是否与前数相同,如果相同则继续。后面的思路与46题排列相同。
code
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
res= []
nums.sort()
self.dfs(nums, res, [])
return res
def dfs(self, nums, res, path):
prev = None
for i in range(len(nums)):
if prev != None and prev == nums[i]:
continue
self.dfs(nums[:i]+nums[i+1:], res, path+[nums[i]])
prev = nums[i]
if len(nums) == 0:
res.append(path)
一个下午又过去了。。