给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
C++
class Solution {
public:
void dfs(vector<vector<int>>& tmp, vector<int>& nums, int start, map<vector<int>,int>& mm)
{
if(start==nums.size()-1)
{
if(0==mm[nums])
{
tmp.push_back(nums);
mm[nums]=1;
}
return;
}
for(int i=start;i<nums.size();i++)
{
swap(nums[i],nums[start]);
dfs(tmp,nums,start+1,mm);
swap(nums[i],nums[start]);
}
}
vector<vector<int>> permuteUnique(vector<int>& nums)
{
vector<vector<int>> tmp;
map<vector<int>,int> mm;
dfs(tmp,nums,0,mm);
return tmp;
}
};
python
from itertools import permutations
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
res=[]
tmp=set(permutations(nums,len(nums)))
for a in tmp:
res.append(list(a))
return res