今天朋友問我一個簡單的題,大意就是個六個字母,而後打印出全部的組合(每一個字母只能使用一次)spa
研究一會發現能夠遞歸進行實現。code
思路:blog
當兩個字母(a,b)進行組合時就只有兩種可能(a,b)(b,a)。遞歸
當三個字母進行組合時(a,b,c),可看做一個字母和另外的兩個字母進行組合(a,(b,c)),而後組合(b,c)。class
而後依次遍歷三個字母和另外兩個字母進行組合,更多的字母也是如此,看做一個字母和其餘字母的組合。循環
想到這裏熟悉遞歸的朋友就知道了,循環調用自身,有終止條件,好了思考完了上代碼。遍歷
具體代碼:di
1 def listzh(a1,mylist): 2 # 遞歸解法 3 if 2 == len(mylist): 4 print(a1+mylist[0]+mylist[1]) 5 print(a1 + mylist[1] + mylist[0]) 6 else: 7 for i,j in enumerate(mylist): 8 c = mylist[:] 9 c.pop(i) 10 listzh(a1+j,c) 11 12 if __name__ == '__main__': 13 strs = 'catdog' 14 mylist = list(set(list(strs))) 15 # mylist=['ab','c','123'] #能夠給定任意須要組合的list 16 listzh('',mylist)