题目是这样的:
把一个字符串中所有字符的所有可能的组合打印出来(字符串中没有重复的字符),不考虑字符顺序('123'和'312'是一样的)
该算法使用分治思想的C语言描述如下:
void generate_all_combinations(char *str, int len, char *prefix)
{
if (len==0)
{
printf("%s%s\n", prefix, str);
return;
}
generate_all_combinations(str+1, len-1, prefix);
generate_all_combinations(str+1, len-1, strncat(prefix, str, 1));
prefix[strlen(prefix)-1] = 0;
}
给一个例子:
int main()
{
// 字符组合问题
char str[LEN] = "123";
char prefix[LEN] = "";
generate_all_combinations(str, 3, prefix);
}
结果为:
3
2
23
1
13
12
123