给定一组可生成某个BST的整数,该数组的多少变体会导致相同的BST?我在C ++和python中找到了一些解决方案,但在Java中没有。我想我理解如何开发正确代码的概念。
我正在为某个Google foobar挑战做这件事。当我抛出任何我能想到的可能的数组时,我得到了正确的答案,但是当我尝试用Google验证我的代码时,我得到了ArithmeticException。我无法找到我的代码中可能出现的位置。
我需要在String中返回答案,参数可以是最多50个整数的数组。
这是我目前的代码:
public static String answer(int[] seq) {
if (seq.length <= 1) {
return Integer.toString(1);
}
ArrayList<Integer> rightList = new ArrayList<>();
ArrayList<Integer> leftList = new ArrayList<>();
int root = seq[0];
for (int i : seq) {
if (i > root) {
leftList.add(i);
} else if (i < root) {
rightList.add(i);
}
}
int[] rightArray = new int[rightList.size()];
int[] leftArray = new int[leftList.size()];
int i = 0;
for (int j : rightList) {
rightArray[i++] = j;
}
int k = 0;
for (int l : leftList) {
leftArray[k++] = l;
}
int recurseLeft = Integer.parseInt(answer(leftArray));
int recurseRight = Integer.parseInt(answer(rightArray));
return Integer.toString(recurseLeft * recurseRight
* interleave(leftList.size(), rightList.size()));
}
private static int interleave(int a, int b) {
return (factorial(a + b)) / ((factorial(a) * factorial(b)));
}
private static int factorial(int n) {
return (n <= 1 ? 1 : n * factorial(n - 1));
}
有人可以帮助找到导致ArithmeticException的错误或可能的整数数组吗?
答案 0 :(得分:1)
ArithmeticException
。代码中唯一使用除法的地方是interleave
函数