输出字符串的所有排列

题目:

输出字符串的所有排列。

 

思路:

递归方法:

将该问题分解为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;
         }
}


你可能感兴趣的:(面试专题——字符串处理/数组)