// 字符串的全排列.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 发布