python求组合数c_【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),'')
執行結果,嗯,這才完美:
總結:
寫代碼,從簡到繁,利用歸納法思維,往往能更快找到解決方法
總結
以上是生活随笔為你收集整理的python求组合数c_【Python】算法之求组合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python决策树分类 导入数据集_py
- 下一篇: python开发网站的优势_Python