我正在寻找一种方法来获得所有可能的数字组合以达到指定的目标值。 设置的数字值可以重复。
例如:
数字集是4,5,6,7,8
我想要达到的价值是16。
因此,我希望得到类似的内容:
4+4+4+4
4+4+8
5+5+6
...
我发现的任何解决方案都没有重复,如下所示:
Efficient algorithm to find a combination, which summation is equal to a known number, in a set of number
提前致谢!
答案 0 :(得分:1)
您也可以使用相同的递归方法。但是,请勿从可能的项目集中删除已使用的项目。如果您想区分a+b+a
和a+a+b
变体,请遍历所有设置(如果不是) - 仅显示当前位置的项目。
function Partitions(Sum, A[], CurIdx, Result)
if Sum = 0
output Result
//all variants with permutations
for i = 0 to A.Length - 1
if A[i] <= Sum
Partitions(Sum - A[i], A[], i, Result + A[i])
//variants without permutations
for i = CurIdx to A.Length - 1
if A[i] <= Sum
Partitions(Sum - A[i], A[], i, Result + A[i])
// you don't need this, just for record:
//variant without repeats essentially does the next:
Partitions(Sum - A[i], A[].Remove i-th item, i, Result + A[i])
or (note i+1 start point for the next recursion level)
for i = CurIdx to A.Length - 1
if A[i] <= Sum
Partitions(Sum - A[i], A[], i + 1, Result + A[i])