我有34个数字范围。 例如:
x1 = {25,35}
x2 = {28,36}
x3 = {15,20}
.
.
x34 = {28,37}
我必须找到所有的组合,这样我从每个范围中选择一个数字,所有这34个数字加起来就是k
例如:
let k = 600
so from x1 - we pick 26
from x2 - we pick 29
.
.
and from x34 we pick 16.
Then, x1 + x2 + x3 + x4 + … + x34 = 600.
我想要所有这些组合
用某种算法是可行的吗
我想用python实现这一点
range(a, b)
包括a,不包括b。 因此这里的实际范围是:我们将从
k
中减去数字,直到达到零,而不是将数字相加到k
这是终止递归的块。基本上,如果我们从
k
的范围中减去每个数字,那么结果必须是零请注意,注释的部分仅用于效率。 所以我们在这里选择一个数字,我们最初选择它为
k
。然后,我们循环第一个范围的所有值,并获得新范围k - i
与新范围ranges[1:]
的组合。你可以看到这些东西是如何结合在一起的编辑并更正答案
对不起,我没注意到OP需要这些组合。尽管如此,我还是将上述代码留给了未来的访问者
使用与上面相同的逻辑,我们可以得到二维列表中的所有组合
注:deepcopy functionality
计算效率黑客
您可以使用itertools的乘积方法检查n个数组之间的所有组合
例如:
因此,如果您想知道构成给定数字的所有组合,只需在最终列表中迭代并检查所有结果
如果您以前不知道范围的数量,只需在itertools.product中使用*运算符,代码将是相同的
相关问题 更多 >
编程相关推荐