解题思路:
一道简简单单的二进制题目,从最后一位开始往前找,判断所有1之间的距离,用一个flag判断第一个1的位置,防止更新错误,代码如下:
class Solution {
public:
int binaryGap(int n) {
int dis = 0, cur = 0;
bool flag = false;
while(n) {
if(n & 1) {
if(flag) dis = max(dis, cur);
cur = 0;
flag = true;
}
cur ++;
n >>= 1;
}
return dis;
}
};
上面方法是直接统计距离的,还有一种记录位置的方法,代码如下:
class Solution {
public:
int binaryGap(int n) {
int dis = 0, index = 0, pre = -1;
while(n) {
if(n & 1) {
if(pre != -1) dis = max(dis, index - pre);
pre = index;
}
index ++;
n >>= 1;
}
return dis;
}
};