1.题目描述
求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2)
2.解题思路
dfs思路,从最小值开始,依次加入中间结果中
注意加入的值是可以重复的,因此递归dfs中的参数还是i,不需要i+1
3.代码实现
def dfs(start,val,res,out):
if val == 0:
res.append(out[:])
return
for i in range(start,val+1):
out.append(i)
dfs(i,val-i,res,out)
out.pop(-1)
res = []
dfs(1,10,res,[])
print (res)
"""
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 2],
[1, 1, 1, 1, 1, 1, 1, 3],
[1, 1, 1, 1, 1, 1, 2, 2],
[1, 1, 1, 1, 1, 1, 4],
[1, 1, 1, 1, 1, 2, 3],
[1, 1, 1, 1, 1, 5],
[1, 1, 1, 1, 2, 2, 2],
[1, 1, 1, 1, 2, 4],
[1, 1, 1, 1, 3, 3],
[1, 1, 1, 1, 6],
[1, 1, 1, 2, 2, 3],
[1, 1, 1, 2, 5],
[1, 1, 1, 3, 4],
[1, 1, 1, 7],
[1, 1, 2, 2, 2, 2],
[1, 1, 2, 2, 4],
[1, 1, 2, 3, 3],
[1, 1, 2, 6],
[1, 1, 3, 5],
[1, 1, 4, 4],
[1, 1, 8],
[1, 2, 2, 2, 3],
[1, 2, 2, 5],
[1, 2, 3, 4],
[1, 2, 7],
[1, 3, 3, 3],
[1, 3, 6],
[1, 4, 5],
[1, 9],
[2, 2, 2, 2, 2],
[2, 2, 2, 4],
[2, 2, 3, 3],
[2, 2, 6],
[2, 3, 5],
[2, 4, 4],
[2, 8],
[3, 3, 4],
[3, 7],
[4, 6],
[5, 5],
[10]]
"""