列出給定字串所有的排列組合

2021-08-27 21:48:23 字數 523 閱讀 7497

問題:

給出乙個字串,列出所有字元的組合。

例如,xyz 所有排列組合的結果為:xyz,xzy,yxz,yzx,zxy,zyx.

邏輯分析:

先從第乙個字元起,我們列出後面每個字元可能出現的組合,然後第二個字元,列出其所有可能的組合...依次往後遞推,n個字元的組合數為n!.

**實現:

**分析:

因為在每種組合中字串的每個字元只能出現一次,所以我們用乙個boolean的陣列來標識某個字元是否已經被新增到out過。

我們用乙個stringbuilder的out來列印滿足要求的的組合。

如果out長度和給定字串的長度相等,說明我們已經得到一種排列組合,把它列印出來,然後return;

否則,對字串所有的字元進行迴圈,如果當前字元已經被新增過,則跳過這個字元,否則,把字元新增到out裡,同時標記它已經被新增,接著通過遞迴得到以其作為開頭的所有字串的組合,之後我們標記此字元已經處理結束(used[i] = false),繼續處理下乙個位置的字元,直到將整個字串都處理完畢。

對給定字串求所有的組合

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

字串排列組合

題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。題目分析 考慮把這個複雜的問題分解成為小的問題。整個字串的排列,可以看成兩個部分 首先,求所有可能出現在第乙個位置的字元 然...

字串排列組合

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