题目
输入一个字符串,打印出该字符串中字符的所有排列。如:abc的所有排列有:abc、acb、bac、bca、cab、cba六种。
思路
利用分治方法,把一个字符串看成由两部分组成:第一部分为它的第一个字符,第二部分是后面的所有字符。我们求整个字符串的排列,可以看成两步:
首先求所有可能出现在第一个位置的字符,即把第一个字符与后面所有的字符交换。
再求后面所有字符的排列。同样把后面的所有字符分成两部分:…第一步交换完成后,记得把原有的字符要记得换回来。
代码
#include <iostream>
#include <string>
using namespace std;
void StringPermutation(string str, int position = 0)
{
int len = str.length();
if (position >= len)
{
cout << str << endl;
return;
}
for (int i = position; i < len; ++i)
{
swap(str[position], str[i]);
StringPermutation(str, position+1);
swap(str[position], str[i]);
}
}
int main()
{
StringPermutation("ABCD");
return EXIT_SUCCESS;
}