编程语言
首页 > 编程语言> > [Java/LeetCode]算法练习:二进制间距(868/simple)

[Java/LeetCode]算法练习:二进制间距(868/simple)

作者:互联网

1 题目描述

题目来源: https://leetcode-cn.com/problems/binary-gap/

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

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

2 解题思路与代码

2.1 原始解决方法

2.1.1 思路

方法1:可利用Java基本数据类型包装类的内置函数 dataType.toBinaryString(val)
方法2:手写进制转码程序
startIndex(开始游标): 跨步的开始下标
  向后滑动/变更的条件:当前的【跨步(Gap)】刚计算完成时: 即 currentIndex(endIndex) 遇到 1 的时候

currentIndex(当前游标):不停向后滑动的游标 or 作为跨步的结束下标

2.1.2 源码(Java)

class Solution {
    public int binaryGap(int n) {
        String binaryStr = Integer.toBinaryString(n);// int 转 二进制字符串

        int maxLengthValue = -1;//[结果字段] 字符串Gap的最大长度值(初始值: 0 or -1)
        int strLength = strLength=binaryStr.length(); // 字符串长度
        int startIndex = 0;//开始游标。向后滑动/变更的条件:当前的【跨步(Gap)】刚计算完成时: 即 currentIndex(endIndex) 遇到 1 的时候
        int currentIndex = 0;//当前游标。

        while(currentIndex<strLength){
            if(binaryStr.charAt(currentIndex) == '1') {
                maxLengthValue = (currentIndex-startIndex)>maxLengthValue?(currentIndex-startIndex):maxLengthValue;
                startIndex = currentIndex;
            }
            currentIndex++;//向后滑动
        }
        return maxLengthValue;
    }
}

内存消耗太高,估计是: Integer.toBinaryString(xx) 函数所致

X 参考文献

标签:868,Java,二进制,simple,游标,int,startIndex,currentIndex,跨步
来源: https://www.cnblogs.com/johnnyzen/p/16187186.html