Question 47–Permutations II
给定一个含有重复元素的整数集合,给出它的所有排列。
code
迭代:
vector<vector<int>> permute(vector<int>& nums) {
//sort(nums.begin(), nums.end());
vector<vector<int>> permutes;
vector<int> temp;
if(nums.size()==0) return permutes;
temp.push_back(nums[0]);
permutes.push_back(temp);
for(int i=1; i<nums.size(); i++){
int handlesize=permutes.size();
for(int j=0; j<handlesize; j++){
int totalpos=permutes[0].size();
for(int insertionpos=0; insertionpos<=totalpos; insertionpos++){
(temp=permutes[0]).insert(temp.begin()+insertionpos,nums[i]);
if(find(permutes.begin(), permutes.end(), temp)==permutes.end()){
permutes.push_back(temp);
}
}
permutes.erase(permutes.begin());
}
}
return permutes;
}
递归:
void permuterecursion(vector<vector<int>>&permutes, vector<int>&temp, vector<int>&nums,int size){
if(temp.size()==size){
permutes.push_back(temp);
return;
}
for(int i=0; i<nums.size(); i++){
if(i>0){
int j=i-1;
while(j>=0&&nums[j]!=nums[i]) j--;
if(j!=-1) continue;
}
vector<int> a=nums;
a.erase(a.begin()+i);
temp.push_back(nums[i]);
permuterecursion(permutes,temp,a,size);
temp.erase(temp.end()-1);
}
}
vector<vector<int>> permute(vector<int>& nums) {
//sort(nums.begin(), nums.end());
vector<vector<int>> permutes;
vector<int> temp;
permuterecursion(permutes,temp,nums,nums.size());
return permutes;
}