我在整数的二进制表示中找到了最长的零序列,但在n=6和n=328时的app.codility.com上结果不正确
公共int解决方案(Int N) {
Integer result = 1;
StringBuilder modNumber = new StringBuilder();
while (result > 0) {
result = n / 2;
modNumber.append(n % 2 + "");
n = result;
}
int length = modNumber.length();
String modString = modNumber.toString();
Integer binaryGap = 0;
List<Integer> lstResult = new ArrayList<>();
Boolean isBinaryGap = false;
if (modString.charAt(0) == '0') {
binaryGap = 0;
} else {
for (int i = 1; i < length; i++) {
char c = modString.charAt(i);
if (c == '0') {
binaryGap += 1;
isBinaryGap = true;
} else {
isBinaryGap = false;
}
if(!isBinaryGap) {
lstResult.add(binaryGap);
binaryGap = 0;
}
}
}
int max=0;
if(!lstResult.isEmpty()) {
max = lstResult.stream().collect(Collectors.summarizingInt(Integer::intValue)).getMax();
}
return max;
}发布于 2019-05-09 10:00:45
问题出在这一部分:
if (modString.charAt(0) == '0') {
binaryGap = 0;
} else {我怀疑您的意图是处理输入为零的情况(所以为什么不立即处理,使用N的原始值?),但是您会得到许多误报,因为形成字符串的技术将位按从最低有效位到最高有效位的顺序排列。对于每个偶数,最低有效位为0,因此您将所有偶数的间隔都报告为0,但唯一正确结果为0的偶数。
我确信,有了这些信息,您就可以修复代码以生成正确的结果,但如果您选择了一种更简单的方法,问题甚至不会出现。例如,如果只扫描二进制表示一次,跟踪当前和最大间隙长度如何?您已经执行了所需的扫描,但不是直接计算结果,而是经历了构建和分析字符串表示的所有混乱过程。代码越简单,给bug留下的空间就越小,而且当bug出现时,它们通常更容易被发现。
https://stackoverflow.com/questions/56050862
复制相似问题