求集合 字串中的所有組合 C語言

2021-07-05 04:53:28 字數 794 閱讀 7211

**:

分析:在本系列部落格的第28題《字串的排列》中,我們詳細討論了如何用遞迴的思路求字串的排列。同樣,本題也可以用遞迴的思路來求字串的組合。

假設我們想在長度為n的字串中求m個字元的組合。我們先從頭掃瞄字串的第乙個字元。針對第乙個字元,我們有兩種選擇:一是把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選取m-1個字元;而是不把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選擇m個字元。這兩種選擇都很容易用遞迴實現。下面是這種思路的參考**:

#include#includeusing namespace std;

void combination(char* string, int number, vector& result)

if(*string == '\0')

return;

result.push_back(*string);

combination(string + 1, number - 1, result);

result.pop_back();

combination(string + 1, number, result);

}void combination(char* string)

}

int main()

由於組合可以是1個字元的組合,2個字元的字元……一直到n個字元的組合,因此在函式void combination(char* string),我們需要乙個for迴圈。另外,我們乙個vector來存放選擇放進組合裡的字元。

求字串的所有組合

問題 求乙個字串的所有組合。解答 題意很清楚,是求乙個字串的所有組合,屬於中學數學知識的範疇,如給定字串str abc 則他的所有組合有 a b c ab ac bc abc。交換兩個字元時雖然能得到兩個不同的排列,但是卻屬於同乙個組合,比如ab和ba是不同的排列,但是只能算乙個組合。include...

求字串的所有組合輸出

劍指offer一書中面試題28求字串的排列,給出了遞迴演算法程式。其中擴充套件題目中提到了,求字串的所有組合。比如輸入字串 abc 輸出應為 a b c ab ac bc abc.借用書上的解題思路 如果輸入n個字元,則這n個字元能構成長度為1 長度為2 長度為n的組合。在求長度為m的組合時,可考慮...

對給定字串求所有的組合

輸入字串,輸出所有的組合,比如輸入abc,輸出 a b c ab ac bc abc。題目解法 abc用01串表示,001表示輸出c,111表示輸出abc,解法如下。空間複雜度n,時間複雜度為2 n 1,因為有這麼多種結果啊。package combination author administra...