題目:輸入一個字符串,打印出該字符中字符的所有排列。例如輸入字符串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;
}
}
}