题目:
输入一个字符串,输出它的所有组合。例如,输入abc,则输出 a b c ab ac bc abc。
思路:采用递归方式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*采用递归方式,思路如下:
1。选择长度为n的字符串中的第一个字符,然后在剩下的n-1个字符中选择m-1个字符;
2。不选择长度为n的字符串中的第一个字符,然后在剩下的n-1个字符中选择m个字符。
*/
void Combine( char *S, int len, int begin, char *T ,int begin1)
{
if (len <= 0)
{
printf("%s\n", T);
return;
}
if (begin > (int)strlen(S)-1)
{
return;
}
T[begin1]= S[begin];
/*当前字符串在选择之中*/
Combine(S, len-1, begin+1, T, begin1+1);
/*当前字符串不在选择之中*/
Combine(S, len, begin+1, T, begin1);
}
void Combination(char* S, int N)
{
int i;
char* T = (char*)malloc(N);
for (i=1; i<=N; i++)
{
T[i] = '\0';
Combine( S, i, 0, T, 0 );
}
free(T);
T = NULL;
}
int main()
{
char s[] = "abc";
Combination(s, strlen(s));
return 0;
}