【发布时间】:2021-11-23 13:58:36
【问题描述】:
我被告知要编写一个递归函数,该函数采用起始索引、整数数组和目标总和,您的目标是找出整数数组的子集加起来是否等于目标总和。
我给出的例子是 groupSum(0, {2, 4, 8}, 10) 应该返回 true,因为 2 和 8 加起来就是目标 10。到目前为止我所能做的就是基本情况。
public boolean groupSum(int start, int[] nums, int target) {
if (nums.length == 0)
{
return false;
}
else if (start == nums.length - 1)
{
return nums[start] == target;
}
else
{
?????
}
}
我不知道我应该去哪里进行实际的递归调用。由于我无法在两次调用之间传递总和,因此在达到目标之前,我看不到如何在每个递归调用中添加一个数字。此外,如示例中所示,我不知道如何让我的代码意识到当一个数字不起作用并跳过它,就像示例中的 4 一样。我正在考虑我应该减去从 int 目标一次一个数字,然后使用新的起点和目标的新值递归调用该方法,但我不知道如何使用它来查看是否有有效的子集。
如果有任何帮助可以帮助我了解如何解决此问题,我将不胜感激,以便我完成它。谢谢!
【问题讨论】:
-
提示:检查一组 3、2 和 1 是否可以加起来为 8。从 3 开始。你有两种情况。您需要检查剩余的集合(2和1)是否可以自己加起来8。您还需要检查剩余的集合是否可以加到8,包括3,IE剩余的集合是否可以加起来(8 - 3)。
标签: java