递归 - 求数字/字符串的全排列
例如:
字符串 abc,全排列为:abc,acb,bac,bca,cab,cba
数字 123,全排列为:123,132,213,231,312,321
代码:
#include <iostream> #include <string> #include <algorithm> using namespace std; int tally = 0; void swapChar(string & _data, int _i, int _j) { char c; c = _data[_i]; _data[_i] = _data[_j]; _data[_j] = c; } void F(string _data, int _n) { if(_n == _data.length() - 1) { tally++; cout << _data << endl; return; } for(int i = _n; i < _data.length(); i++) { swapChar(_data, i, _n); F(_data, _n + 1); swapChar(_data, i, _n); } } int main() { string data = "ABC"; //string data = "ABCDE"; F(data, 0); cout << endl << "count:" << tally; return 0; }
图示理解: