由数组递归中的返回引起的混淆(java)

时间:2014-06-07 22:16:27

标签: java arrays boolean return

给定一组整数,是否可以将整数分成两组,这样两组的总和是相同的。每个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?

1 个答案:

答案 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;
        }