输出字符串的所有排列

题目:

输出字符串的所有排列。

 

思路:

递归方法:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值