字串的組合

2021-06-06 19:06:49 字數 1471 閱讀 5844

問題描述:輸入乙個字串,輸出它的所有組合。例如,輸入abc,則輸出 a b c ab ac bc abc。

分析:如果輸入的字串的長度為n,則這個字串能構成長度為1的組合、長度為2的組合、……、長度為n的組合。在求n個字元的長度為m(1<=m<=n)的組合的時候,我們可以把這n個字元分成兩部分:第乙個字元和其餘所有字元。如果把第乙個字元放進組合中,則下一步求在剩餘的n-1個字元中長度為m-1的組合;如果不把第乙個字元放進組合中,則下一步求在剩餘的n-1個字元中長度為m的組合。這是典型的遞迴形式。下面是參考**。

/* --- 注釋版 --- */

#include#include#includevoid combination(char *pstr, int length);

void combinationcore(char *pstr, char *presult, char *pch, int num, int length);

void combination(char *pstr, int length)

//申請成功

else

}}/*各個引數的介紹

* char *pstr :源字串的當前指標

* char *pch :下乙個待放進結果的字元指標

* int num :結果字串剩餘長度

* int length :源字串中剩餘長度

*/void combinationcore(char *pstr, char *presult, char *pch, int num, int length)

//遞迴終止條件,源字串中剩餘長度 = 結果字串剩餘長度

if(num == length)

//假設當前結果字串包含當前源字串的第乙個字元

*pch = *pstr;

combinationcore(pstr+1, presult, pch+1, num-1, length-1);

//不包含當前源字串的第乙個字元

combinationcore(pstr+1, presult, pch, num, length-1);

}int main()

#include#include#includevoid combination(char* pstr, int length);

void combinationcore(char* pbegin, char* presult, char* pch, int num, int length);

void combination(char* pstr, int length)

void combinationcore(char* pbegin, char* presult, char* pch, int num, int length)

else if(num == length)

else

}int main()

字串組合

題目 輸入乙個字串,輸出該字串中字元的所有組合。舉個例子,如果輸入 abc,它的組合有a b c ab ac bc abc。假設我們想在長度為 n的字串中求 m個字元的組合。我們先從頭掃瞄字串的第乙個字元。針對第乙個字元,我們有兩種選擇 一是把這個字元放到組合中去,接下來我們需要在剩下的 n 1個字...

字串的組合

題意 對乙個字串str,求其字元的所有組合。例如字串abc,其組合就有a b c ab ac bc abc 解題思路 上述問題等價於在字串str中,求長度為1,2,3,n的子串的集合。現在要解決的問題就是在長度為n的字串中求長度為m的子串有哪些。將待處理的字串分為兩部分,第乙個字元為第一部分,剩餘的...

字串的組合

劍指offer上的拓展題目,輸入乙個字串,輸出該字串的字元的所有組合,比如輸入字串 abc,輸出a b c ab ac bc abc。可以考慮求長度為n的字串中m個字元的組合,設為c n,m 原問題的解即為c n,1 c n,2 c n,n 的總和。對於求c n,m 從第乙個字元開始掃瞄,每個字元有...