输入:6 输出:1 解释: 6 的二进制是 0b110 。
示例 4:
输入:8 输出:0 解释: 8 的二进制是 0b1000 。 在 8 的二进制表示中没有连续的 1,所以返回 0 。
提示:
1 <= N <= 10^9
做法比较简单,将数字右移,逐位判断当前位置的二进制值并记录最大的间距。
可以设初值为-1来判断是否最开始是否进入计数
代码如下:
class Solution { public int binaryGap(int N) { int max = 0; int len = -1; while (N != 0) { if ((N & 1) == 1) { if (len == -1) len = 0; else { max = Math.max(max, len + 1); len = 0; } } else { if (len != -1) len++; } N = N >>> 1; } return max; } }