第一次发题解(*^_^*)
没看到哪个大佬用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; }