我是新手。 我有一个代码,它显示所有可能达到某个数字的和。 但它的复杂性太高,而且当数字太高时,它需要花费太长的时间。我怎样才能把它重构成更简单的东西呢?你知道吗
import itertools
def combos(n):
result = []
for i in range(n,0,-1):
for seq in itertools.combinations_with_replacement(range(1,n+1), i):
if sum(seq) == n:
seq = list(seq)
result.append(seq)
return(result)
combos(4)
输出:
[[1,1,1,1],[1,1,2],[1,3],[2,2],[4]]
递归版本可以如下所示:
测试:
分解问题的思想是:一组组合可以写成一个数字,它与所有的组合连在一起,其总和是
n
减去第一个数字。你知道吗一个不处理重复的简单代码可以是这样的:
它给出:
(1, 2)
和(2, 1)
是相似的,为了防止出现这种情况,添加了i_max
参数(参见第一个函数)。这里的意思是总是按降序排列。右边的数字总是等于或小于左边的数字。这个最大值作为参数传递,循环从它开始,而不是请求的总和。你知道吗相关问题 更多 >
编程相关推荐