字串排列組合

2021-07-22 10:33:21 字數 882 閱讀 7230

題目描述: 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

題目分析: 考慮把這個複雜的問題分解成為小的問題。整個字串的排列,可以看成兩個部分:

首先,求所有可能出現在第乙個位置的字元

然後,固定第乙個字元,求後面所有字元的排列。這個時候仍然把後面的所有字元分成兩個部分:後面的第乙個字元,以及這個字元之後的所有字元。

void permutation(vector& array, string str, int begin)

}vectorpermuta(string str)

題目描述: 不是求字元的所有排列,而是求字元的所有組合呢?還是輸入三個字元a、b、c,組合有:a, b, c , ab, ac, bc, abc。

題目分析: 字串的組合與排列不同,當交換字串中的兩個字元時,雖然能得到兩個不同的排列,但卻是乙個組合。比如ab和ba是兩個排列,但是乙個組合。 假設輸入n個字元,則這n個字元能構成長度為1的組合、長度為2的組合、......、長度為n的組合。在求n個字元組成長度為m的組合的時候,與字串全排列的求解思想類似,我們可以把這n個字元分為兩個部分:第乙個字元和剩餘的其他所有的n-1個字元。這個時候可以分為兩種情況:

也就是說,我們可以把求n個字元組成長度為m的組合問題分解成兩個子問題,分別求n-1個字串長度為m-1的組合,以及求n-1個字元的長度為m的組合。這兩個子問題都可以用遞迴方式解決。

void combinationcore(char* str, int num, vector& result)

}int main()

字串排列組合

1 字串的組合 子串行 題目 輸入乙個字串,輸出該字串中字元的所有組合。例子 輸入 abc,它的組合有 a b c ab ac bc abc 分析 我們可以將字串中的每個字元看成二叉樹的乙個節點,根節點為空,每個節點都會有兩種選擇 要 和 不要 兩種選擇 那麼我們就可以利用遞迴實現。public c...

字串的排列 組合

遞迴方法 1 全排列 面試題28 字串的排列 從集合依次選出每乙個元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理 n個數的全排列,一共有n!種情況.n個位置,第乙個位置有n種,當第乙個位置固定下來之後,第二個位置有n 1種情況.全排列的過程 選擇第乙個字元 獲得第乙個字元固定下...

字串的排列組合

題目描述 輸入乙個字串,列印出該字串中字元的所有排列。基本思路 從字串中選出乙個字元作為排列的第乙個字元,然後對剩餘的字元進行全排列,如此遞迴,從而得到所有字元的全排列。以對字元 abc 進行全排列為例,可以按下述步驟執行 將a固定在第一位,求後面bc的排列 將b固定在第一位,求後面ac的排列 將c...