如何求一个数的加法组合,比如3的加法组合为1+1+1 = 3, 1+2 = 3两种,4的加法组合为1+1+1+1 = 4,1+1+2 = 4,1+3 = 4,2+2=4。从上可以看出每考虑组合元素顺序问题。对于1+2=3,2+1=3都看出是一类的。采用递归的方式实现,python代码实现如下。参考播客
import copy
def calculate_add_combination_4_num(n):
res_list = []
tmp_list = []
def num_to_n(n,tmp_list, start):
if n == 1:
tmp = copy.deepcopy(tmp_list)
tmp.append(1)
res_list.append(tmp)
else:
for i in range(start,n):
tmp_list.append(i)
num_to_n(n-i,tmp_list,i)
tmp_list.remove(tmp_list[-1])
tmp = copy.deepcopy(tmp_list)
tmp.append(n)
res_list.append(tmp)
num_to_n(n,tmp_list, 1)
# duplicate remove
res_list = duplicate_remove(res_list, n)
return res_list
def duplicate_remove(a_list, n):
len_list = len(a_list)
for i in range(len_list - 1, -1, -1):
# remove list which equal to its own
if len(a_list[i]) == 1:
a_list.remove(a_list[i])
continue
for j in range(i):
if set(a_list[i]) == set(a_list[j]):
a_list.remove(a_list[i])
break
return a_list
if __name__ == '__main__':
a = []
b = calculate_add_combination_4_num(4)
print(b)
结果如下
[[1, 1, 1, 1], [1, 1, 2], [1, 3], [2, 2]]