这应该是一个非常简单的问题,但是我没有适当的算法训练,发现自己一直试图解决这个问题。
我需要通过添加一组有限的较小数字来计算可能的组合以达到数字。
想象一下,我们正在玩乐高积木,我有一块12个单位的砖,我需要列出我可以使用更短的砖块进行的替换。对于这个例子,我们可以说可用的砖块长2,4,6和12个单位。
构建可以计算变量的算法可能是一个好方法吗?我一次可以使用多少砖块没有界限,所以它可以是6x2以及1x12,重要的是我需要列出所有选项。
因此输入是目标长度(在这种情况下为12)和可用砖块(数字数组(任意长度),在本例中为[2,4,6,12])。
我的方法是从较低的数字开始并将其加起来直到我达到目标,然后采取下一个最低等等。但是这样我错过了多个数字的组合,当我试图将其考虑在内时,它变得非常混乱。
答案 0 :(得分:1)
我建议采用递归方法:给定函数f(target,permissibles)
以target
的所有表示形式列出permissibles
的组合,您可以这样做:
def f(target,permissibles):
for x in permissibles:
collect f(target - x, permissibles)
如果您不想区分12 = 4+4+2+2
和12=2+4+2+4
,则需要按降序排序permissibles
并执行
def f(target,permissibles):
for x in permissibles:
collect f(target - x, permissibles.remove(larger than x))