1. 程式人生 > >LeetCode 868. 二進位制間距(C、C++、python)

LeetCode 868. 二進位制間距(C、C++、python)

給定一個正整數 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

C

int binaryGap(int N) 
{
    int res=0;
    int* temp=(int*)malloc(sizeof(int)*30);
    int k=0;
    int idx=0;
    while(N)
    {
        idx++;
        if(1==N%2)
        {
            temp[k++]=idx;
        }
        N/=2;
    }
    if(k>1)
    {
        for(int i=1;i<k;i++)
        {
            int cc=temp[i]-temp[i-1];
            res=res>cc?res:cc;
        }
    }
    return res;
}

C++

class Solution {
public:
    int binaryGap(int N) 
    {
        int index=0;
        int res=0;
        int i=N;
        vector<int> temp;
        while(i)
        {
            index++;
            if(1==i%2)
            {
                temp.push_back(index);
            }
            i/=2;
        }
        if(temp.size()>1)
        {
            for(int i=1;i<temp.size();i++)
            {
                res=max(res,temp[i]-temp[i-1]);
            }
        }
        return res;
    }
};

python

class Solution:
    def binaryGap(self, N):
        """
        :type N: int
        :rtype: int
        """
        idx=0
        res=0
        temp=[]
        while(N):
            idx+=1
            if(1==N%2):
                temp.append(idx)
            N//=2
        if(len(temp)>1):
            for i in range(1,len(temp)):
                res=max(res,temp[i]-temp[i-1])
        return res