數學中的組合概念是:從 n 個元素中不放回的取出 m 個元素組成乙個組合(不考慮順序),組合數是所有可能產生的組合的種數
本列通過 26 個小寫字母來演示
組合的**如下:
def combination_k(s, k):
'''字串 s 中選取 k(0 <= k <= len(s)) 個元素,進行組合,以列表的形式返回所有可能的組合
s --> 輸入的字串
k --> 選取的元素的個數
測試結果如下:
combination_k('abc', 2) >>> ['ab', 'ac', 'bc']
combination_k('c', 2) >>>
combination_k('c', 2) 的遞迴內部解釋如下:
--> combination_k('c', 2)
--> for i in combination_k('', 1):
c + i
# 由於 combination_k('', 1) 的返回結果是乙個空列表,這 for 迴圈遍歷不會被執行,所以返回初始設定的值
'''# recursive basis
if k == 0: return ['']
# recursive chain
subletters =
# 此處涉及到乙個 python 遍歷迴圈的特點:當遍歷的物件為空(列表,字串...)時,迴圈不會被執行,range(0) 也是一樣
for i in range(len(s)):
for letter in combination_k(s[i+1:], k-1):
subletters += [s[i] + letter]
return subletters
在編寫乙個遍歷呼叫 combination_k 函式獲取全組合
def combination_all(s):
'''本函式配合 combination_k 函式實現全組合
s --> 組合元素的樣本
以列表的形式返回所有長度可能的組合
測試如下:
combination_all('abc') >>> ['a', 'b', 'c', 'ab', 'ac', 'bc', 'abc']
'''comb_list =
# 通過 for 迴圈呼叫 combination_k(s, k) 獲取不同 k 值下的所有組合
for i in range(1, len(s)+1):
comb_list += combination_k(s, i)
return comb_list
定義主函式後呼叫
def main():
letter = 'abcdefghijklmnopqrstuvwxyz'
print('組合及全組合計算器')
print('組合總樣本:' + letter)
mode = eval(input('請選擇執行模式:1 代表『組合』; 2 代表『全組合』:'))
if mode == 1:
print('您選擇的是組合模式:')
length = eval(input('請輸入組合元素樣本的長度:'))
letter_numbers = eval(input('請輸入入選組合元素的個數:'))
print('您選擇的組合樣本是:' + letter[:length] + ',參與組合的元素個數是:' + letter_numbers)
c_k = combination_k(letter[:length], letter_numbers)
print(c_k)
elif mode == 2:
print('您選擇的是全組合模式:')
length = eval(input('請輸入組合元素樣本的長度:'))
print('您選擇的組合樣本是:' + letter[:length])
c_a = combination_all(letter[:length])
print(c_a)
if __name__ == '__main__': main()
Java實現全組合
abs 的all combination is abc,a,b,c,ab,ac,bc 2 n 1次 public class combination system.out.println system.out.println result num is nbit 1 public static vo...
python實現陣列的全組合以及全排列
全排列與全組合全排列的遞迴 python實現 全排列 全排列 defswap nums,i,j temp nums i nums i nums j nums j temp 遞迴實現 defpermution nums,start,end if start end print nums else fo...
遞迴學習 組合 全組合排列
sample input 1 2 3 sample output include using namespace std const int len 10 int n int mat len int result len bool used len 初始值為false,表示都沒有使用過 void s...