尝试打印长度为n的所有平衡二进制字符串时,会无缘无故引发java堆栈溢出异常

ttcibm8c  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(424)

这两个方法在相互使用时引发堆栈溢出异常。第一个是使用递归生成所有二进制字符串,第二个是检查它是否平衡。你知道为什么吗?当我独立运行它们时,它们运行正常。str将在开始时作为空字符串输入,n是字符串的所需大小。

public static void printEqualBinaries(String str, int n) {
        if (str.length() == n && isBalanced(str,n)) {
            System.out.println(str);
            return;
        }
        String k1 = str + "1";
        printEqualBinaries(k1, n);
        String k2 = str + "0";
        printEqualBinaries(k2, n);
    }

    public static boolean isBalanced(String str, int n) {
        if (n % 2 == 0) {
            int index = n / 2 - 1;
            int sumLeft = 0;
            for (int i = 0; i <= index; i++) {
                sumLeft += Integer.parseInt(Character.toString(str.charAt(i)));
            }
            int sumRight = 0;
            for (int i = index + 1; i < str.length(); i++) {
                sumRight += Integer.parseInt(Character.toString(str.charAt(i)));
            }
            if (sumLeft == sumRight) {
                return true;
            } else {
                return false;
            }
        } else {
            int index = n / 2;
            int sumLeft = 0;
            for (int i = 0; i < index; i++) {
                sumLeft += Integer.parseInt(Character.toString(str.charAt(i)));
            }
            int sumRight = 0;
            for (int i = index + 1; i < str.length(); i++) {
                sumRight += Integer.parseInt(Character.toString(str.charAt(i)));
            }
            if (sumLeft == sumRight) {
                return true;
            } else {
                return false;
            }
        }
    }
    public static void main(String[] args) {
        printEqualBinaries("", 3);
    }
qzwqbdag

qzwqbdag1#

此方法的每次调用 printEqualBinaries(str, n); 带输入参数 (str.lenght() != n ) 因为条件 (str.length() == n ) 总是评估为假;
如果您为k1和k2添加“stop”条件,您将得到4个二进制字符串,例如printequalbinaries(“,13);1848个结果,如(hashmap输出):
{1110001010110=0001110101001、1101000100101=00101101010、111000101001=000110010110、1001010101010=01101010101、1101000111000=00101110001111、101011001101=0101001100010、1001010010110=011010101001等}
当然,假设这就是你所说的平衡。

相关问题