题解 | #有重复项数字的所有排列#
有重复项数字的所有排列
http://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863
public:
int length;
vector<vector<int>> ans;
vector<vector<int> > permuteUnique(vector<int> &num) {
length=num.size();
cout<<length;
vector<int> pop0;
sort(num.begin(),num.end());
count(num,pop0);
return ans;
}
void count(vector<int> mid,vector<int> pop){
int cal;
if(pop.size()==length){
ans.push_back(pop);
cout<<"出";
}
else{
for(int i=0;i<mid.size();i++){
if(i!=(mid.size()-1)&&mid[i]==mid[i+1]) continue;//相同元素只选择最后一个
cout<<"进";
cal=mid[i];
pop.push_back(mid[i]);
mid.erase(mid.begin()+i);
count(mid,pop);
pop.pop_back();
mid.insert(mid.begin()+i,cal);
}
}
return;
}
};
首先用sort排序,然后后面采用选择与不选择,并且若选择了之后要将选择删除后的回溯的方法,采用递归的方式进行,注意的是,若相同的元素将会导致后面排序重复,因此若元素相同,则只选择最后一个元素使用。