原题:
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] ]
给出有重复数字的数列的全排列,在上一题基础上改一下就行,结果:
Success
Runtime: 20 ms, faster than 95.64% of C++ online submissions for Permutations II.
Memory Usage: 10.4 MB, less than 52.38% of C++ online submissions for Permutations II.
代码:
class Solution {
public:
vector<vector<int>> re;
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<bool> dict(nums.size(),0);
vector<int> init;
getp(nums,init,dict,nums.size());
return re;
}
void getp(vector<int>& original,vector<int>& cur,vector<bool>& dict,int remain){
if(!remain){re.push_back(cur);return;}
for(int i=0;i<original.size();i++){
if(i!=original.size()-1&&original[i]==original[i+1]&&dict[i+1]==0){continue;}
if(!dict[i]){
cur.push_back(original[i]);
dict[i]=1;
getp(original,cur,dict,remain-1);
dict[i]=0;
cur.pop_back();
}
}
}
};