这两个方法在相互使用时引发堆栈溢出异常。第一个是使用递归生成所有二进制字符串,第二个是检查它是否平衡。你知道为什么吗?当我独立运行它们时,它们运行正常。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);
}
1条答案
按热度按时间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等}
当然,假设这就是你所说的平衡。