给定一组整数,是否可以将整数分成两组,这样两组的总和是相同的。每个int必须在一个组或另一个组中。编写一个递归的辅助方法,它接受你喜欢的任何参数,并从splitArray()初始调用你的递归帮助器。 (不需要循环。)
这是我想要解决的编码蝙蝠的问题。我真的陷入困境,所以我找到了一个解决方案,但我对一行的目的感到困惑,并完全混淆了最终的return语句正在做什么。谢谢你的帮助!
public boolean splitArray(int[] nums) {
return splitArrayHelper(nums, 0, new int[nums.length], 0, 0, new int[nums.length], 0, 0);
}
private boolean splitArrayHelper(int[] nums, int n, int[] split1, int s1, int t1, int[] split2, int s2, int t2) {
if (n == nums.length)
return t1 == t2; //returns true or false
split2[s2] = split1[s1] = nums[n]; // What is the purpose of this line?
return
splitArrayHelper(nums, n + 1, split1, s1 + 1, t1 + nums[n], split2, s2, t2) ||
splitArrayHelper(nums, n + 1, split1, s1, t1, split2, s2 + 1, t2 + nums[n]);
} //I don't know what this return statement is doing. How is the or statement decided?
答案 0 :(得分:1)
我们的想法是,我们必须将原始数组拆分为2个数组,称为A和B,因此对于原始数组中的每个数字,该数字将属于A或B.我们保持A的总和到目前为止(group1Total)和B(group2Total)的总和。
我会写下我的帮手
private static boolean splitHelp(int[] nums, int elementCount, int group1Total, int group2Total) {
if (elementCount == nums.length) {
return group1Total == group2Total;
}
return splitHelp(nums, elementCount + 1, group1Total+ nums[n], group2Total) //The element belongs to array A
|| splitHelp(nums, n + 1, group1Total, group2Total+ nums[n]) //or the element belongs to array B;
}