字符組合問題的分治算法

題目是這樣的:


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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章