您好,登錄后才能下訂單哦!
假設有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),'')
執行結果,嗯,這才完美:
寫代碼,從簡到繁,利用歸納法思維,往往能更快找到解決方法
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。