力扣(LeetCode)二进制间距 个人题解

输入: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;
    }
}

猜你喜欢

转载自www.cnblogs.com/axiangcoding/p/10585528.html