"如何求正整数n所有可能的整数组合"(python)

题目描述:给定一个正整数n,求解出所有和为n的整数组合,要求组合按照递增方式展示,而且唯一。例如4 =1+1+1+1,1+1+2, 1+3, 2+2, 4

分析与解答:以数值4为例,和为4的所有整数组合一定都小于4。首先选择数字1,然后用递归的方法求和3(4-1)的组合,一直递归下去直到用递归求和为0的组合的时候,所选的数字序列就是一个和为4的数字组合。然后,第二次选2,接着用上面的方法,以此类推,直到找出所有的组合为止。

def getAllCombination(sums, result, count):
    """
    # 求和为sums的所有整数组合
    :param sums: sums正整数
    :param result: 存储组合的结果
    :param count: 记录组合中数字的个数
    :return:
    """

    if sums < 0:
        return

    # 数字的组合满足和为sums的条件,打印出所有组合
    if sums == 0:
        print("满足条件的组合")
        i = 0
        while i < count:
            print(result[i])
            i += 1
        print('\n')
        return

    # 打印debug信息,为了便于理解
    print("———————————当前组合———————————")
    i = 0
    while i < count:
        print(str(result[i]))
        i += 1
    print("---------------")

    # 确定组合中下一个取值
    i = (1 if count == 0 else result[count - 1])
    print("---"+"i="+str(i)+"count="+str(count)+"---")

    while i <= sums:
        result[count] = i
        count += 1
        getAllCombination(sums - i, result, count)  # 求和为sums-i的组合
        count -= 1
        i += 1  # 找下一个数字作为组合中的数字

# 方法功能:找出和为n的所有整数的组合
def showAllCombination(n):
    if n < 1:
        print("参数不满足要求")
        return
    result = [None]*n
    getAllCombination(n, result, 0)


if __name__ == "__main__":
    showAllCombination(4)

猜你喜欢

转载自blog.csdn.net/qq_42013574/article/details/89072499