[英]How to solve the non-negative subset sum using recursion in Java?
这个问题让我很困惑:
给定一组非负整数的和值
sum
,我们的目标是确定其元素的总和等于所有子集sum
。 例如,如果一组非负整数是{3; 34; 4; 12; 5; 2}
{3; 34; 4; 12; 5; 2}
{3; 34; 4; 12; 5; 2}
和sum = 9
,则答案为{4; 5}
{4; 5}
和{4; 2; 3}
{4; 2; 3}
{4; 2; 3}
。
这个问题必须通过一种递归方法(一个递归函数和一个主string[]args
函数)解决,但是我不知道如何实现。 有人可以提示吗?
看到您要求提示而不是代码,我将为您提供有关算法的指导,以帮助您入门。
通常,递归算法如下所示:
recursiveFunction(currentResult, context)
if currentResult satisfies given condition
process currentResult
for each possibleResult in context
recursiveFunction(possibleResult, contextWithResultRemoved)
在您的情况下,方法的签名将类似于:
public void allSubsetsWithSum(int targetSum, Set<Integer> current, Set<Integer> remaining)
满足条件的测试只是将电流总和与目标进行比较。
“ for each”将仅查看remaining
每个整数,然后在递归之前将其移至current
。
有效率捷径,例如不处理remaining
整数,这将使总和超出目标。 但这并不是使算法起作用的必要条件。
希望这会帮助您入门。 如果您不明白提示,请询问其他问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.