今天朋友问我一个简单的题,大意就是个六个字母,然后打印出所有的组合(每个字母只能使用一次)
研究一会发现可以递归进行实现。
思路:
当两个字母(a,b)进行组合时就只有两种可能(a,b)(b,a)。
当三个字母进行组合时(a,b,c),可看作一个字母和另外的两个字母进行组合(a,(b,c)),然后组合(b,c)。
然后依次遍历三个字母和另外两个字母进行组合,更多的字母也是如此,看作一个字母和其他字母的组合。
想到这里熟悉递归的朋友就知道了,循环调用自身,有终止条件,好了思考完了上代码。
具体代码:
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)