给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。
如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/bi… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
双循环
class Solution {
public int binaryGap(int n) {
StringBuilder s= new StringBuilder();
while(n>0){
int num=n%2;
s.insert(0,num);
n=n/2;
}
// System.out.println(s);
//已有二进制,判断相邻1之间的距离
if(s.length()<2){
return 0;
}
int max=0;
for(int i=0;i<s.length();++i){
if(s.charAt(i)=='1')
for(int j=i+1;j<s.length();++j){
if(s.charAt(j)=='1'){
max = max > j-i ? max : j-i;
j=s.length();
}
}
}
// System.out.println(max);
return max;
}
}
转换成二进制字符串,每次比较前一个1与后一个1的距离
class Solution {
public int binaryGap(int n) {
String binStr = Integer.toBinaryString(n);
int lastOneIdx = n, max = 0;
for (int i = 0; i < binStr.length(); i++) {
if (binStr.charAt(i) == '1') {
max = Math.max(max, i - lastOneIdx);
lastOneIdx = i;
}
}
return max;
}
}