题目:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:
关于这个题目的思路,我在此不进行过多的文字赘述。这个题目其实就是数学中的全排列的题目,关于全排列问题的所有相关问题,请参考下面这个网址:https://www.cnblogs.com/likaiming/p/8401086.html
当然了,我们可以采用暴力穷举法来实现,但是这样会显得繁琐,而且当存在重复元素的时候,穷举似乎稍稍有些困难了,因此这个题目给出了递归的解法:
按照习惯:先上代码:
1 class Solution { 2 private: 3 set<string>res; 4 public: 5 vector<string> Permutation(string str) { 6 vector<string> resv; 7 if(str.size() == 0 || str.size() >9) 8 return resv; 9 else 10 { 11 Permutation(str,0); 12 resv.insert(resv.end(),res.begin(),res.end()); 13 return resv; 14 } 15 } 16 void Permutation(string str, int begin) 17 { 18 if(begin == str.size()) 19 { 20 res.insert(str); 21 return; 22 } 23 for(int i = begin;str[i]!='