【Python】演算法之求組合
原題:
假設有a,b,c,1,2五個字元,請用任意一門語言求出這五個數的所有組合
思考:
1)這題字元有點多,我來變換一下,a、b、c三個字元,請用任意一門語言求這三個字元的組合(數學歸納法不是從最少識別規律開始麼?)
2)嗯,三個字元,肯定是三重迴圈,最關鍵的是最記憶體迴圈記住外層迴圈是什麼,那麼自然而然寫成如下:
#!/usr/bin/python tmp_str='' a=['a','b','c'] for t_level0 in range(0,len(a)) : for t_level1 in range(0,len(a)): for t_level2 in range(0,len(a)): tmp_str=a[t_level0] + a[t_level1] + a[t_level2] print(tmp_str)
執行一下,完美(三位組合,27種),如圖:
3)嗯?如果是五個字元排列,或者N個字元的組合呢?我難道要要在我的程式碼裡寫5個迴圈,或者是N個迴圈嗎?看來重要的是我要根據字元數來控制迴圈的層數,那麼怎麼控制呢,當然要用函式(函式中寫一個迴圈,接受N作為迴圈的控制,如果N遞減沒到1,繼續呼叫函式),咦?這不是遞迴嗎?哈哈,還真是,於是程式碼寫成了下面這樣:
#!/usr/bin/python #-*- coding=UTF-8 -*- #tmp_str='' a=['a','b','c'] ''' #用位置記錄外層迴圈的值 for t_level0 in range(0,len(a)) : for t_level1 in range(0,len(a)): for t_level2 in range(0,len(a)): tmp_str=a[t_level0] + a[t_level1] + a[t_level2] print(tmp_str) ''' #prev_str 記錄外層迴圈的值 def compose(c_list,level,prev_str) : if level == 1: for value in c_list : tmp_str=prev_str + value print(tmp_str) else : level -= 1 for value in c_list: tmp_str=prev_str+value compose(c_list,level,tmp_str) compose(a,len(a),'')
執行結果,嗯,這才完美:
總結:
寫程式碼,從簡到繁,利用歸納法思維,往往能更快找到解決方法
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30221425/viewspace-2676810/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 求自然數的組合數的回溯演算法演算法
- 【總結】求組合數的方法
- 機器學習之特徵組合:組合獨熱向量機器學習特徵
- python物件導向程式設計之組合Python物件程式設計
- 【轉載】Python字串操作之字串分割與組合Python字串
- python學習之什麼是組合資料?Python
- Python引數組合Python
- [演算法]組合類問題演算法
- 資料結構與演算法之硬幣組合問題資料結構演算法
- Python_類的組合Python
- python 多型、組合、反射Python多型反射
- python trigger 組合Python
- 【演算法學習】組合數學演算法
- 求陣列中k個數的所有組合陣列
- 使用 useRequestURL 組合函式訪問請求URL函式
- 【Python】組合資料型別Python資料型別
- 使用 Python 組合 NBA 球星卡Python
- Python 函式(引數組合)Python函式
- PHP 設計模式之組合模式PHP設計模式
- 設計模式系列之「組合模式」設計模式
- JavaScript專題之函式組合JavaScript函式
- python組合資料型別(集合)Python資料型別
- 23種設計模式之組合模式設計模式
- Java設計模式之(十)——組合模式Java設計模式
- 【趣味設計模式系列】之【組合模式】設計模式
- javascript設計模式 之 7組合模式JavaScript設計模式
- 設計模式漫談之組合模式設計模式
- C#設計模式之組合模式C#設計模式
- 17. 使用MySQL之組合查詢MySql
- 組合
- Python 學習之元組Python
- 遞迴演算法實踐---實現排列組合遞迴演算法
- 程式設計師必備演算法——排列組合程式設計師演算法
- IT組合和專案組合管理(轉)
- 【數學】組合數學 - 排列組合
- 設計模式之組合模式(Composite)分享設計模式
- 設計模式之組合模式---Composite Pattern設計模式
- 求:1,2,5這三個數不同組合的和為100的組合的個數!Java實現。Java