868. 二进制间距

84 阅读1分钟

给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。

如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。

在这里插入图片描述

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/bi… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


双循环

@[TOC]

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;
    }
}