27 字符串的排列

 1 //字符串的排列
 2 //题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
 3 //输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
-----------------------------------------------------------------
//思路:这就是全排序问题
//规律:
//第一步:首先求出所有可能出现第一位置的字符,即把第一个字符和后面所有的字符交换。
//第二部:固定第一个字符,求后面所有字符的排列。
//这个时候仍然将后面所有的字符分成两部分:后面字符的第一字符,以及这个字符之后的所有字符。然后把第一个字符逐一和它后面的字符交换。
4 class Solution 5 { 6 public: 7 vector<string> Permutation(string str) 8 { 9 if(str.empty()) 10 { 11 return {}; 12 } 13 vector<string> tmpVec; 14 PermutationOfStr(tmpVec, str, 0); 15 sort(tmpVec.begin(), tmpVec.end()); 16 return tmpVec; 17 } 18 private: 19 void PermutationOfStr(vector<string> &array, string str, int begin) 20 { 21 if (begin == str.size()-1) 22 { 23 array.push_back(str); 24 } 25 for (int i = begin; i <= str.size()-1; ++i) 26 { 27 if (i!=begin && str[i] == str[begin]) 28 { 29 continue; 30 } 31 swap(str[i], str[begin]); 32 PermutationOfStr(array, str, begin+1); 33 swap(str[i], str[begin]); 34 } 35 } 36 };

 

posted @ 2017-08-25 12:17  繁星的夜空2012  阅读(140)  评论(0编辑  收藏  举报