題目是這樣的:
把一個字符串中所有字符的所有可能的組合打印出來(字符串中沒有重複的字符),不考慮字符順序('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