今天朋友问我一个简单的题,大意就是个六个字母,而后打印出全部的组合(每一个字母只能使用一次)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)