标签:swa alt height style tor 第一个 log 字典顺序 索引
题目:
解答:
1 class Solution { 2 public: 3 vector<string> permutation(string str) 4 { 5 vector<string> result; 6 if(str.empty()) 7 { 8 return result; 9 } 10 11 Permutation(str,result,0); 12 13 // 此时得到的result中排列并不是字典顺序,可以单独再排下序 14 sort(result.begin(),result.end()); 15 16 return result; 17 } 18 19 void Permutation(string str,vector<string> &result,int begin) 20 { 21 if(begin == str.size()-1) // 递归结束条件:索引已经指向str最后一个元素时 22 { 23 if(find(result.begin(),result.end(),str) == result.end()) 24 { 25 // 如果result中不存在str,才添加;避免aa和aa重复添加的情况 26 result.push_back(str); 27 } 28 } 29 else 30 { 31 // 第一次循环i与begin相等,相当于第一个位置自身交换,关键在于之后的循环, 32 // 之后i != begin,则会交换两个不同位置上的字符,直到begin==str.size()-1,进行输出; 33 for(int i=begin;i<str.size();++i) 34 { 35 swap(str[i],str[begin]); 36 Permutation(str,result,begin+1); 37 swap(str[i],str[begin]); // 复位,用以恢复之前字符串顺序,达到第一位依次跟其他位交换的目的 38 } 39 } 40 } 41 42 void swap(char &fir,char &sec) 43 { 44 char temp = fir; 45 fir = sec; 46 sec = temp; 47 } 48 };
标签:swa alt height style tor 第一个 log 字典顺序 索引
原文地址:https://www.cnblogs.com/ocpc/p/12858432.html