全排列
求一个字符串S的全排列.
假设字符串的长度为N。问题可以分解为确定了第一个字符,求后面N-1个字符的全排列递归来解决。递归的关键在于第一个字符有N种选择。
递归表达式为T(N) = N * T(N-1), T(1) =1
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
void swap(char *a, char *b) { char c; if (a == b) return; c = *a; *a = *b; *b = c; } void func(char *s) { int i, len = strlen(s); if (len == 1) return; for (i = 0; i < len; i++) { swap(s, s + i); func(s + 1); swap(s, s +i); } }