【发布时间】:2019-04-04 23:26:39
【问题描述】:
我需要弄清楚如何递归地确定是否存在选择的元素,使得所选元素的总和与给定整数列表的未选择元素的总和相同。
所以例如集合
nums = [1,3,5,3] 返回 true 因为子集可以是 [3,3] 和 [1,5] 这两个列表加起来是 6,所以该方法应该返回 true .如果该子集不存在,则应返回 false。
我有代码:
private static boolean canFind(int[] nums, int index, int sumOne, int sumTwo) {
if (index == nums.length) {
return false;
}
if (oneSum == twoSum) {
return true;
}
if (oneSum < twoSum) {
return canFind(nums, index + 1, sumOne + nums[index], sumTwo);
}
return canFind(nums, index + 1, sumOne, sumTwo + nums[index]);
}
但我不知道为什么这不起作用,甚至为什么会这样。
【问题讨论】:
-
能否请您显示可拆分方法,并且您也必须编辑您的代码,因为 oneSum 和 twoSum 没有声明,而且我没有看到此代码中有任何递归。
-
你好。我认为如果您这样问,您的问题可能会更准确:“递归确定一组数字是否包含两个总和相等的子集”
-
抱歉,可拆分方法已重命名为 canFind(这是一个递归函数,我只是忘记进行更改。将编辑问题。
-
你能举例说明你是如何输入代码的吗?
-
从同名的公共方法调用代码: public static boolean canFind(int[] nums) { return canFind(nums, 0, 0, 0);
标签: java arrays recursion sum set