字符串的全排列
全排列是面试中常考的算法,博主前不久参加某知名互联网公司的面试,面试观要求写出全排列的算法,由于博主能力有限,结果跪。全排列可采用递归的方法也可以采用非递归的方法。下面介绍递归的方法:
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 bool exchangeable(string &s, int begin, int end) 6 { 7 if (s[begin] == s[end]) 8 { 9 return false; 10 } 11 return true; 12 } 13 14 void arrange(string &s, int begin) 15 { 16 if (begin == s.length()) //递归结束条件 17 { 18 cout << s << endl; 19 } 20 else 21 { 22 for (int i = begin; i < s.length(); i++) //进行递归 23 { 24 if (i==begin||exchangeable(s, begin, i)) 25 { 26 swap(s[begin], s[i]); 27 arrange(s, begin + 1); 28 swap(s[begin], s[i]); 29 } 30 } 31 } 32 } 33 34 int main() 35 { 36 string a = "1123"; 37 arrange(a, 0); 38 return 0; 39 }