首页 > 解决方案 > 计算二进制间隙时无限循环

问题描述

我目前正在解决二进制间隙问题(计算两个 1 之间 0 的数量,并返回找到的最大间隙 0),我的解决方案首先将整数 N 转换为 N 的二进制形式的字符串,这工作正常。

从概念上讲,我正在做的(或至少认为我正在做的)是计数 0,直到我达到一个 1 字符,然后将其与变量下的当前 0 计数进行比较,gap然后我会将我的零计数器归零zero_count,我还添加了一个 if 语句来检查它是否到达二进制字符串的末尾,如果没有则返回 0,如果找到则返回 1。

出于某种原因,我得到了一个无限循环,我想我已经将它缩小到索引值不增加,我不知道为什么。如果有人可以解释,我将不胜感激!

这是在 Java 中完成的。

import java.util.*;

class Solution {
    public int solution(int N) {
        // write your code in Java SE 8
        String binary = "";

        int power = 31;

        //double expo = Math.pow(2,power);
        while(power !=-1){
            if(N - Math.pow(2,power) > -1){
                binary += "1";
                N -= Math.pow(2,power);
            }
            else{binary += "0";}
            power--;
        }
        System.out.println(binary);
        
        //above works
        int  gap = 0;
        int zero_count = 0;
        int index = 0;
        for( int i = 0; i < binary.length(); i++){
            if(binary.charAt(i) == '1'){
                index= i+1;
                while(binary.charAt(index) =='0'){
                    index++;
                    zero_count++;
                    if(index == binary.length()-1){
                        return 0;
                    }
                }
            }
            if(zero_count > gap){
                gap = zero_count;
            zero_count = 0;
            }
            i = index;
        }
        return gap;
    }
}





标签: javainfinite-loop

解决方案


循环太多。。

添加 main 来驱动/运行代码;您可以删除方法上的静态。

import java.util.*;

class Solution {
    public static void main(String[] args) {
            System.out.println("the max gap is: "+ Solution.solution(103241));
        }

    
    public static int solution(int N) {
        // write your code in Java SE 8
        String binary = "";

        int power = 31;

        //double expo = Math.pow(2,power);
        while(power !=-1){
            if(N - Math.pow(2,power) > -1){
                binary += "1";
                N -= Math.pow(2,power);
            }
            else{binary += "0";}
            power--;
        }
        System.out.println(binary);
        
        //above works
        int  max_gap = 0;
        int zero_count = 0;
        int index = 0;
        //boolean 
        for( int i = 0; i < binary.length(); i++){
            if(binary.charAt(i) == '0') {
                zero_count++;
            }
            else {
                if (zero_count > max_gap){
                    max_gap = zero_count;
                }
                zero_count = 0;
            }           
        }
        return max_gap;
    }
}

推荐阅读