問題は、「int の配列が与えられた場合、int を 2 つのグループに分割して、一方のグループの合計が 10 の倍数になり、もう一方のグループの合計が奇数になるようにすることは可能ですか?任意の引数を取る再帰ヘルパー メソッドを作成し、splitOdd10() から再帰ヘルパーへの最初の呼び出しを行います (ループは必要ありません。)"
以下に正しい解決策がありますが、すべての戻り値は正しい値とは反対です。それを修正するハックな方法は、最後にブール値を切り替えることでしたが、概念的にどのような間違いを犯しているのか知りたいです。
public boolean splitOdd10(int[] nums) {
if (nums.length==0) return false;
//Should not have the ! operator
return (!splitOdd10(nums,0,1));
}
public Boolean splitOdd10(int[] nums, int lowerBound,int upperBound) {
int split10Sum=getSum(nums,lowerBound,upperBound);
int splitOddSum=getSum(nums)-split10Sum;
if (split10Sum % 10 == 0 && splitOddSum % 2 == 0) return true;
if (upperBound < nums.length) {
if (splitOdd10(nums,lowerBound,upperBound+1)) return true;
if (splitOdd10(nums,lowerBound+1,upperBound+1)) return true;
}
if (lowerBound < upperBound)
if (splitOdd10(nums,lowerBound+1,upperBound)) return true;
return false;
}
public int getSum(int[] nums) {
return getSum(nums,0,nums.length);
}
public int getSum(int[] nums, int lowerBound, int upperBound) {
if (lowerBound == upperBound) return 0;
return nums[lowerBound]+getSum(nums,lowerBound+1,upperBound);
}