问题描述:
输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串
abc、acb、bac、bca、cab 和 cba。
解法一:递归实现
图1 递归示意图
程序如下:
void CalcAllPermutation(string& s, int from)
{
if (from == s.length() - 1)
cout << s << endl;
else
{
for (int i = from; i < s.length(); i++)
{
swap(s[from], s[i]);
//cout << "s1=" << s << endl;
CalcAllPermutation(s, from+1);
swap(s[from], s[i]); //返回上一级
//cout << "s2="<<s << endl;
}
}
}
解释:程序中第一个swap就是图一中黑色箭头的顺序,第二个swap就是图一中红色箭头的顺序。
解法二