LeetCode 868. 二進位制間距(C、C++、python)
阿新 • • 發佈:2018-11-21
給定一個正整數 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