我有奇偶校验问题:二进制字符串是一个只包含'0'和'1'字符的字符串 . 二进制字符串的奇偶校验定义如下 . 如果字符“1”出现在该字符串中的次数是偶数,则奇偶校验为0;如果它是奇数,则奇偶校验为1.例如,奇偶校验“101”为0,奇偶校验“10110”为1,奇偶校验“001001101”为0.写一个函数,使用签名
public static int parity(String binaryStr)
//no changes are allowed & only use recursive solution, no loops allowed
我设法迭代地写它,但我的递归是outOfboundries:
public static int parity(String binaryStr) {
int counter = 0;
for (int i = 0; i < binaryStr.length () ; i++) {
if (binaryStr.charAt (i) == 49) {
counter++;
}
}
if ( counter % 2 == 0 ) {
return 0;
}
else {
return 1;
}
}
递归:
private static int index = 0;
private static int ans = 0;
private static int parity(String binaryStr) {
if ( index == binaryStr.length ()-1 ) {
if ( ans % 2 == 0 ) {
return 0;
}
else {
return 1;
}
}
else if ( binaryStr.charAt (index) == '1' ) {
ans++;
return parity (binaryStr.substring (index++));
}
return parity (binaryStr.substring (index++));
}
请帮我纠正一下
1 回答
您的代码的主要问题是将
binaryStr.substring (index++)
传递给递归调用,该调用传递原始String
而不是子字符串 . 因此,您将获得无限递归 . 你可以使用++index
.我建议不要使用
static
变量,而是使用以下内容:说明:
如果逐位XOR(^)的两个操作数相等,则返回0.如果一个操作数为0而另一个操作数为1,则返回1 .
这正是您需要的逻辑:
如果第一个字符是'1'且
String
的其余部分具有奇偶校验1(即'1'的奇数),则整个String
的奇偶校验为0 .如果第一个字符是'1'且
String
的结果具有奇偶校验0(即偶数'1's, the whole
字符串'的奇偶校验为1 .如果第一个字符是'0',则整个
String
的奇偶校验与String
的其余部分的奇偶校验相同 .