题目描述:
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
解法:
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums){
vector<vector<int>> res;
int sz = nums.size();
if(sz == 0){
return res;
}else if(sz == 1){
return {nums};
}else{
for(int i = sz-1; i >= 0; i--){
if(i < sz-1 && nums[i] == nums[i+1]){
continue;
}
vector<int> lst(nums.begin(), nums.begin() + i);
lst.insert(lst.end(), nums.begin() + i+1, nums.end());
vector<vector<int>> tmp = permute(lst);
int len = tmp.size();
for(int j = 0; j < len; j++){
vector<int> _lst = tmp[j];
_lst.push_back(nums[i]);
res.push_back(_lst);
}
}
return res;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
return permute(nums);
}
};