假設(shè)有a,b,c,1,2五個(gè)字符,請用任意一門語言求出這五個(gè)數(shù)的所有組合
1)這題字符有點(diǎn)多,我來變換一下,a、b、c三個(gè)字符,請用任意一門語言求這三個(gè)字符的組合(數(shù)學(xué)歸納法不是從最少識(shí)別規(guī)律開始么?)
2)嗯,三個(gè)字符,肯定是三重循環(huán),最關(guān)鍵的是最內(nèi)存循環(huán)記住外層循環(huán)是什么,那么自然而然寫成如下:
#!/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)
運(yùn)行一下,完美(三位組合,27種),如圖:
3)嗯?如果是五個(gè)字符排列,或者N個(gè)字符的組合呢?我難道要要在我的代碼里寫5個(gè)循環(huán),或者是N個(gè)循環(huán)嗎?看來重要的是我要根據(jù)字符數(shù)來控制循環(huán)的層數(shù),那么怎么控制呢,當(dāng)然要用函數(shù)(函數(shù)中寫一個(gè)循環(huán),接受N作為循環(huán)的控制,如果N遞減沒到1,繼續(xù)調(diào)用函數(shù)),咦?這不是遞歸嗎?哈哈,還真是,于是代碼寫成了下面這樣:
#!/usr/bin/python #-*- coding=UTF-8 -*- #tmp_str='' a=['a','b','c'] ''' #用位置記錄外層循環(huán)的值 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 記錄外層循環(huán)的值 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),'')
執(zhí)行結(jié)果,嗯,這才完美:
寫代碼,從簡到繁,利用歸納法思維,往往能更快找到解決方法
分享題目:【Python】算法之求組合-創(chuàng)新互聯(lián)
URL地址:http://jinyejixie.com/article4/gpioe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、做網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容