java - 计算二进制间隙时无限循环
问题描述
我目前正在解决二进制间隙问题(计算两个 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;
}
}
解决方案
循环太多。。
添加 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;
}
}
推荐阅读
- sql - Oracle SQL 查询层次结构计数
- javascript - 使用小屏幕时,在按钮文本内强制换行
- mysql - 键引用和表引用不匹配
- typescript - Typescript 通用接口匹配属性值
- class - Optaplanner 中车辆容量的 Drools 规则
- java - 错误是在 BufferedReader 和 InputstreamReader 中找不到符号
- python - 如何自定义pytest名称
- python - 仅读取文件的第一个值
- wordpress - HTML5 背景视频/MP4 无法在 Chrome/Firefox 触摸屏笔记本电脑中播放
- python - 刷新输出定向到 PyQt 中的 QTextEdit