给定数组查找给出总和的所有元素组合

时间:2014-10-02 08:42:14

标签: algorithm

我在接受采访时被问到以下问题。虽然我已经使用n-ary树回答了它,但我已经被告知它不够好"。所以,我很好奇,它是什么最佳解决方案。

输入:整数数组:[2,3,7]和总和:10

输出:加起来总和的数组元素的所有组合(例如2 + 2 + 2 + 2 + 2,2 + 2 + 3 + 3,3 + 7等)

谢谢, Ť

1 个答案:

答案 0 :(得分:0)

使用dynamic programming可以解决此问题。你有二维dp。假设您在名为mem的数组中执行dp。 mem [i] [j]将存储使用索引元素i求和j, j + 1... n的方式的数量(此处n是数组的大小)。

您有以下关系mem[i][j] = mem[i][j+1] + mem[i - a[j]][j+1](当然,您需要检查i是否不小于a[j])。现在,您可以通过获取S的值来找到获得总和mem[S][j]的方式的数量。一旦你有阵列,重建解决方案并不是很难。我建议你自己尝试这样做,如果你想不出来就写一个评论。