給定幾個字母,輸出全部可能的組合(使用遞歸解決)

今天朋友問我一個簡單的題,大意就是個六個字母,而後打印出全部的組合(每一個字母只能使用一次)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)
相關文章
相關標籤/搜索