輸出該字串中字元的所有組合

2021-06-08 15:53:59 字數 1085 閱讀 1462

題目:輸入乙個字串,輸出該字串中字元的所有組合。舉個例子,如果輸入

abc,它的組合有a、

b、c、

ab、ac、

bc、abc。

分析:在本系列部落格的第

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

來存放選擇放進組合裡的字元。

01 輸出字串中字元的所有組合

1 def perm s 2 這裡是遞迴函式的出口,為什麼呢,因為這裡表示 乙個長度為1的字串,它的排列組合就是它自己。3if len s 1 4return s 5 sl 儲存字串的所有可能排列組合 6for i in range len s 這個迴圈,對應 解題思路1 確定字串的第乙個字母是誰,...

求字串的所有組合輸出

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

如何輸出字串的所有組合

問題描述 假如字串中所有字元都不重複,如何輸出字串的所有組合。例如 abca,結果應是a,b,c,ab,ac,bc,abc。最容易想到的就是遞迴了,但效率會變得很差,因為棧被呼叫了2 n次方,為了提高效率,可以構造乙個長度為n的01字串,表示輸出結果中是否包含某個字元,例如 001 c,010 b,...