题目:输入一个字符串,打印出该字符中字符的所有排列。例如输入字符串abc,则打印出由字符a\b\c所能排列出来的所有字符串abc\acb\bac\bca\cab\cba
思路:递归实现。分为两步:1、首先求出所有可能出现在第一个位置的字符,即把第一个字符和后面所有字符交换。
2、固定第一个字符,求后面所有字符的排列。
那么后面的字符也可以分为两部分,第一个字符和后面的所有字符,我们重复1、2步骤,所以这是一个递归过程
void Permutation(char*pStr)
{
if (pStr == NULL)
return;
Permutation(pStr, pStr);
}
void Permutation(char*pStr, char*pBegin)
{
if (pBegin == '\0')
return pStr;
else
{
for (char pCh = pBegin; pCh != '\0'; pCh++)
{
char temp = *pCh;
*pCh = *pBegin;
*pBegin = *temp;
Permutation(pStr, pBegin + 1);
temp = *pCh;
*pCh = *pBegin;
*pBegin = *temp;
}
}
}