标签:width play 博文 line ima str 代码 void ==
原创博文,转载请注明出处!
# 题目
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
# 思路(递归)
分两步求字符串的全排列:首先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换;然后固定第一个字符,求后面所有字符的全排列。
1 class Solution { 2 public: 3 vector<string> Permutation(string str) { 4 // 存储结果 5 vector<string> result; 6 // 边界条件 7 if(str.size()==0) return result; 8 // 递归实现字符串的字典序全排列 9 Permutation(result, str, 0); 10 // 调整顺序 11 sort(result.begin(), result.end()); 12 // 返回结果 13 return result; 14 } 15 16 void Permutation(vector<string> &result, string str, int begin)//遍历第begin位的所有可能性 17 { 18 // 递归出口 19 if(begin==str.size()-1) result.push_back(str); 20 21 for(int i=begin; i<=str.size()-1;++i) 22 { 23 // 去重 24 if(i!=begin && str[i]==str[begin]) continue; 25 26 // 全排列 27 swap(str[i], str[begin]); 28 Permutation(result, str, begin+1); 29 swap(str[i], str[begin]); 30 } 31 } 32 };
标签:width play 博文 line ima str 代码 void ==
原文地址:https://www.cnblogs.com/wanglei5205/p/8794650.html