题目
考查二进制&运算,因为&运算,能够从最低位判断该位等于1还是0
public int binaryGap(int n) {
int ans = 0;
String str = toBinary(n);
int left = -1;
int index = 0;
while (index < str.length()) {
if (str.charAt(index) == '1') {
left = index;
break;
}
index++;
}
for (int i = index + 1; i < str.length(); i++) {
if (str.charAt(i) == '1') {
ans = Math.max(ans, i - left);
left = i;
}
}
return ans;
}
public String toBinary(int n) {
StringBuilder ans = new StringBuilder();
while (n != 0) {
ans.append(n % 2);
n /= 2;
}
return ans.reverse().toString();
}
//使用&运算,同时记录当前位 = 1 的下标,可以避免两次遍历
class Solution {
public int binaryGap(int n) {
int ans = 0;
int index = 0;
int left = -1;
while (n != 0) {
int cur = n & 1;
if (left != -1 && cur == 1) {
ans = Math.max(ans, index - left);
}
left = cur == 1 ? index : left;
n >>= 1;
index++;
}
return ans;
}
}