字符串全排列

// 字符串的全排列.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include "string.h"




/*
*   解题思路:
*   假设字符串 abcd
*   思路就是 把每个字符都交换一下
*   
*   最外层循环
*   1) abcd, 2) bacd, 3) cbad, 4) dbca
*   第二层循环
*	1) abcd, acbd, adcb
*	2) bacd, bcad, bdca
*	3) cbad, cabd, cdab
*	4) dbca, dcba, dacb
*	第三层循环
*	...
*	...
*
*/


char src[] = {"abcd"};


void swap(char *a, char *b)
{
    char tmp = *a;
    *a = *b;
    *b = tmp;
}


void allArray(char *array, int len)
{
    if (len <= 0)
    {
        char* p= &src[0];
        for (int idx = 0; idx<4; idx++)
        {
            printf("%c", src[idx]);
        }
        printf("; ");
    }

    /*
    * 在一层循环中, 头元素不断地和其他元素进行位置交换,
    * 因此首先把头元素保存起来
    */
    char *pHead = &array[0];

    for (int idx=0; idx<len; ++idx)
    {
        swap(pHead, &array[idx]);
        allArray(&array[1], len-1);
        swap(&array[idx], pHead);
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
    allArray(src, strlen(src));
    return 0;
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值