【发布时间】:2010-07-29 13:59:49
【问题描述】:
我需要一种算法来识别一组数字的所有可能组合,这些数字的总和为某个其他数字。
例如,给定集合{2,3,4,7},我需要知道总和为x 的所有可能子集。如果x == 12,则答案为{2,3,7};如果x ==7 的答案是{{3,4},{7}}(即两个可能的答案);如果x==8 没有答案。请注意,正如这些示例所暗示的,集合中的数字不能重复使用。
这个问题was asked on this site a couple years ago 但答案是在 C# 中,我需要在 Perl 中完成并且不知道如何翻译答案。
我知道这个问题很难(请参阅其他帖子进行讨论),但我只需要一个蛮力解决方案,因为我正在处理相当小的集合。
【问题讨论】:
-
+1 表示您的最后一段。知道什么运行时是可接受的总是至关重要的。
-
Note that, as these example imply, numbers in the set cannot be reused.所以如果你有{2,3,4,6,9}和x==11,那么你就不能有{{2,3,6},{2,9}},因为2的重用?或者set是指subset? -
@vol7ron,他的意思是
{2,3,3,3}不是您示例的有效答案,因为您只能使用 3 一次(每个子集)。 -
@cjm:我会这么想,但是不同的组合游戏有不同的规则
-
@vol7ron,@cjm 是正确的。对于我需要解决的问题,集合的每个数字只能使用一次。