【发布时间】:2015-07-10 23:30:27
【问题描述】:
我有一个正在尝试解决的编码问题。我还没有想出一个好的算法。
给定一个数字 X(例如 200),确定列表中的哪些数字(例如:4、5、10、10、23、67、889、150、50)相加后等于 X。在这种情况下答案是 (50, 150)。到目前为止,我考虑过首先对列表进行排序(从最低到最高),然后循环添加数字,直到我得到一个大于 X 的值。丢弃列表中所有剩余的数字,因为它们不需要(例如 889)。现在我有了产生 200 总和所需的数字列表。现在我需要确定哪些是总和为 200 的数字。
目前卡在这一点上。
非常感谢任何想法。
【问题讨论】:
-
我认为你不能在达到总数后丢弃数字:如果它们的组合不起作用怎么办?我认为您必须继续使用小于所需总数的所有数字。并且可能从那里从最高到最低工作。
-
有一个非常著名的动态规划算法来解决这个问题。它被称为子集和。
-
您想统计总和等于
X的子集的数量,或者您想查找是否有一个子集是`X`?
标签: algorithm