如何求一个数的加法组合

如何求一个数的加法组合,比如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]]

猜你喜欢

转载自blog.csdn.net/ruguowoshiyu/article/details/81324084