Java - 可能导致相同二进制搜索树的数字数组的排列

时间:2015-12-17 23:42:45

标签: java arrays binary-search-tree permutation

给定一组可生成某个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的错误或可能的整数数组吗?

1 个答案:

答案 0 :(得分:1)

当你试图除以零时,抛出

ArithmeticException。代码中唯一使用除法的地方是interleave函数