您的位置:首页 > 其它

输出字符串的所有排列

2012-09-04 11:39 274 查看
题目:

输出字符串的所有排列。



思路:

递归方法:

将该问题分解为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;
         }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐