题目来源于力扣(LeetCode)
一、题目
题目相关标签:数学
提示:
- 1 <= N <= 10^9
二、解题思路
-
循环对数字 N 进行二进制的舍位,判断最低位是否为 1
-
为 1 时,将之间记录的 maxLen 与本次两个 1 间隔的数量比较,取最大值,并将 count 重置为 1
-
为 0 时,若 count 不为 0,说明已经记录有二进制 1 的位置,则 count + 1
注意:101,间隔为 2,11,间隔为 1
三、代码实现
public static int binaryGap(int N) {
int count = 0;
int maxLen = 0;
while (N > 0) {
if ((N & 1) == 1) {
maxLen = Math.max(maxLen, count);
count = 1;
} else {
if (count > 0) {
count += 1;
}
}
N = N >> 1;
}
return maxLen;
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
int n = 22; // output: 2
// int n = 5; // output: 2
// int n = 6; // output: 1
// int n = 8; // output: 0
int result = binaryGap(n);
System.out.println(result);
}