1def 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個...