题目描述:给定一个正整数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)