【发布时间】:2019-05-31 22:14:59
【问题描述】:
我正在解决来自CodingBat 的以下问题:
给定一个整数数组,是否可以将整数分成两组,使得一组的和是 10 的倍数,而另一组的和是奇数。每个 int 必须在一个组中。编写一个递归助手方法,它接受你喜欢的任何参数,并从 splitOdd10() 对你的递归助手进行初始调用。 (不需要循环。)
我发现a post on SO discussing a similar topic 是否可以将一个数组分成两个具有相等乘积的数组,并尝试通过类比编写代码。这是我目前得到的(在 Java 中):
public boolean splitOdd10(int[] nums) {
if (nums.length == 0)
return false;
else
return canSplit(0, nums, 0);
}
private boolean canSplit(int first, int[] nums, int term) {
if (first == nums.length - 1)
return (term + nums[first]) % 10 == 0 || (term + nums[first]) % 2 == 1;
else
return canSplit(first + 1, nums, term + nums[first]);
}
但是在进一步思考代码后,我了解到它只是检查整个原始数组的总和是 10 的倍数还是奇数。
我很难理解如何从 n 步进到 n-1 以及绑定条件应该是什么,因为这两个数组不相互依赖,这与它们的乘积相等时不同。
有人可以给我一个提示吗?谢谢。
【问题讨论】:
-
不太确定这是否已在问题中得到澄清。但是一组中的任何一个都可以是空的吗?例如
numssize1或者如果所有元素都可以满足一个条件,则将它们归为一组? -
@nullpointer 我刚刚查了一下 - {1} 的预期答案是真的,所以是的,其中一个数组可能是空的。
标签: java arrays algorithm recursion