第一次发题解(*^_^*)
没看到哪个大佬用set来去重,所以小伙子来丢丢人
思路:求得的每一个全排列都插入到set中,利用set去重的特性去除重复的排列
注释的部分是之前实现无重复项数字的全排列的内容
void m_permute(//set<vector<int> > &answer,
vector<vector<int> > &answer,
vector<int> &num,int first,int last){
if(first == last){
// answer.insert(num);
answer.push_back(num);
}else{
for(int i = first; i <= last;i++){
swap(num[i],num[first]); //将n个数分别作为第一个数
m_permute(answer,num,first+1,last); //n-1个数的全排列
swap(num[i],num[first]); //还原
}
}
}
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int> > answer;
set<vector<int> > answer_set;
m_permute(answer,num,0,num.size()-1);
set<vector<int> >::iterator it;
for(it = answer_set.begin(); it != answer_set.end(); it++ ){
answer.push_back(*it);
}
return answer;
}

京公网安备 11010502036488号