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

2022-05-18 14:40:26 字數 875 閱讀 7403

1

def perm(s=''):2

#這裡是遞迴函式的出口,為什麼呢,因為這裡表示:乙個長度為1的字串,它的排列組合就是它自己。

3if len(s)<=1:

4return

[s]5 sl= #

儲存字串的所有可能排列組合

6for i in range(len(s)): #

這個迴圈,對應 解題思路1)確定字串的第乙個字母是誰,有n種可能(n為字串s的長度

7for j in perm(s[0:i]+s[i+1:]): #

這個迴圈,對應 解題思路2)進入遞迴,s[0:i]+s[i+1:]的意思就是把s中的s[i]給去掉

對應 解題思路2)問題就從「返回字串中的字母排列組合」 **變成了** 「返回 第乙個字母+除去第乙個字母外的字串的排列組合」

9return

sl10

11def

main():

12 perm_nums=perm('

abb') #

有可能存在字母相同的情況

13 no_repeat_nums = list(set(perm_nums)) #

去重,挺牛的,這個**

14print('

perm_nums

', len(perm_nums), perm_nums)

15print('

no_repeat_nums

', len(no_repeat_nums), no_repeat_nums)

16pass

1718

if__name__ == '

__main__':

19 main()

如何輸出字串的所有組合

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

輸出字串的所有組合的java實現

問題描述 假設字串中的所有字元不重複,如何輸出字串的所有組合,例如,輸入字串為 abc 則輸出a b c ab ac bc abc,共7種組合。根據題意,如果字串中有n個字元,根據排列組合的性質,此時一共需要輸出2 n 1種組合。最容易想到的方式是遞迴,遍歷字串,每個字串只能取或不取。若取該字元,就...

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

題目 輸入乙個字串,輸出該字串中字元的所有組合。舉個例子,如果輸入 abc,它的組合有a b c ab ac bc abc。分析 在本系列部落格的第 28題 字串的排列 中,我們詳細討論了如何用遞迴的思路求字串的排列。同樣,本題也可以用遞迴的思路來求字串的組合。假設我們想在長度為 n的字串中求 m個...