首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么trailing_zeroes (n =6和n=328)的BinaryGap不正确

为什么trailing_zeroes (n =6和n=328)的BinaryGap不正确
EN

Stack Overflow用户
提问于 2019-05-09 09:07:53
回答 1查看 39关注 0票数 0

我在整数的二进制表示中找到了最长的零序列,但在n=6和n=328时的app.codility.com上结果不正确

https://imgur.com/rzFsjaY

公共int解决方案(Int N) {

代码语言:javascript
复制
    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;
}
EN

回答 1

Stack Overflow用户

发布于 2019-05-09 10:00:45

问题出在这一部分:

代码语言:javascript
复制
    if (modString.charAt(0) == '0') {
        binaryGap = 0;
    } else {

我怀疑您的意图是处理输入为零的情况(所以为什么不立即处理,使用N的原始值?),但是您会得到许多误报,因为形成字符串的技术将位按从最低有效位到最高有效位的顺序排列。对于每个偶数,最低有效位为0,因此您将所有偶数的间隔都报告为0,但唯一正确结果为0的偶数。

我确信,有了这些信息,您就可以修复代码以生成正确的结果,但如果您选择了一种更简单的方法,问题甚至不会出现。例如,如果只扫描二进制表示一次,跟踪当前和最大间隙长度如何?您已经执行了所需的扫描,但不是直接计算结果,而是经历了构建和分析字符串表示的所有混乱过程。代码越简单,给bug留下的空间就越小,而且当bug出现时,它们通常更容易被发现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56050862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档