// 字符串的全排列.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;
}
字符串全排列
最新推荐文章于 2018-04-18 21:44:21 发布