Binary Gap 二進位制間距

麥田裡的哈士奇發表於2018-11-28

給定一個正整數 N,找到並返回 N 的二進位制表示中兩個連續的 1 之間的最長距離。 

如果沒有兩個連續的 1,返回 0 。

示例 1:

輸入:22
輸出:2
解釋:
22 的二進位制是 0b10110 。
在 22 的二進位制表示中,有三個 1,組成兩對連續的 1 。
第一對連續的 1 中,兩個 1 之間的距離為 2 。
第二對連續的 1 中,兩個 1 之間的距離為 1 。
答案取兩個距離之中最大的,也就是 2 。

示例 2:

輸入:5
輸出:2
解釋:
5 的二進位制是 0b101 。

示例 3:

輸入:6
輸出:1
解釋:
6 的二進位制是 0b110 。

示例 4:

輸入:8
輸出:0
解釋:
8 的二進位制是 0b1000 。
在 8 的二進位制表示中沒有連續的 1,所以返回 0 。

提示:

  • 1 <= N <= 10^9

思路:這道題的距離其實就是每兩個1之間的距離,所以我們只需要每次把數字N除二取餘即可,注意對於第一個1需要做特殊處理。用變數pre表示第一個1的位置,dis表示累加的距離。

參考程式碼:

class Solution {
public:
    int binaryGap(int N) {
        int res = 0;
        int pre = 0;
        while (N && pre != 1) {
            pre = N % 2;
            N /= 2;
        }
        int dis = 1;
        while (N) {
            if (N % 2 == 0) {
                dis++;
                N /= 2;
                continue;
            }
            else {
                res = max(res, dis);
                dis = 1;
                N /= 2;
            }
        }
        return res;
    }
};

 

 

相關文章