我对这个问题感到困惑:
给定一组非负整数和值
sum
,目标是识别其元素总和等于sum
的所有子集。例如,如果非负整数集为{3; 34; 4; 12; 5; 2}
和sum = 9
,则答案为{4; 5}
和{4; 2; 3}
。
这个问题必须通过递归方法(一个递归函数和一个主string[]args
函数)来解决,但我不知道如何制作它。有人可以暗示一下吗?
答案 0 :(得分:0)
看到你要求提示而不是代码,我会给你一个关于算法的指针,以帮助你入门。
通常递归算法类似于:
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
的整数,这将使总和超过目标。但这并不是使算法工作的必要条件。
希望这会让你开始。如果您不理解这些提示,请进一步询问。