字符串的排列
1 class Solution { 2 public: 3 vector<string> Permutation(string str) { 4 if(str.size()==0) return res; 5 change(str,res,0); 6 //此时得到的result中排列并不是字典顺序,可以单独再排下序 7 sort(res.begin(),res.end()); 8 return res; 9 } 10 void change(string str,vector<string> &result,int begin){ 11 //递归结束条件:索引begin已经遍历到了最后的位置 12 if(begin==str.size()-1){ 13 if(find(result.begin(),result.end(),str) == res.end()){ 14 // 如果result中不存在str,才添加;避免aa和aa重复添加的情况 15 result.push_back(str); 16 } 17 } 18 else{ 19 for(int i=begin;i<str.size();i++){ 20 // 第一次循环i与begin相等,相当于第一个位置自身交换,关键在于之后的循环 21 swap(str[i],str[begin]); 22 // 之后i != begin,则会交换两个不同位置上的字符,直到begin==str.size()-1,进行输出; 23 change(str,result,begin+1); 24 // 复位,用以恢复之前字符串顺序,达到第一位依次跟其他位交换的目的 25 swap(str[i],str[begin]); 26 } 27 } 28 } 29 private: 30 vector<string> res; 31 };