题目:
输出字符串的所有排列。
思路:
递归方法:
将该问题分解为n个相同的子问题。
设str=s1s2...sn;
[str] 表示str的全排列,
str-sk表示str中去掉第k个字符后的字符串,
则有
[str] = s1[str-s1] + s2[str-s2]+...+sn[str-sn];
再去求解n个子问题即可。
void Permutation( char* pStr)
{
if( pStr == NULL )
return;
Permutation( pStr,pStr);
}
void Permutation( char *pStr, char *pBegin)
{
if( *pBegin == '\0') //递归结束,递归到最后一位
{
printf("%s\n",pStr);
return;
}
for( char* pCh = pBegin; *pCh!='\0'; ++pCh ) //分解n个小问题
{
char temp= *pCh;
*pCH =*pBegin;
*pBegin =temp;
Permutation(pStr, pBegin+1); //子问题
//换回来,再进行下一个子问题
temp = *pCh;
*pCH =*pBegin;
*pBegin =temp;
}
}