[Java/LeetCode]算法练习:二进制间距(868/simple)
作者:互联网
1 题目描述
给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。
如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。
2 解题思路与代码
2.1 原始解决方法
2.1.1 思路
- step0 边界条件:
10^9
< int型(Java)的最大值(21,4748,3647
) - step1 Int型输入参数
n
转二进制字符串binaryStr
方法1:可利用Java基本数据类型包装类的内置函数 dataType.toBinaryString(val)
方法2:手写进制转码程序
- step2 设置2个对
binaryStr
从左到右遍历的游标startIndex
、currentIndex
,并最终筛选出【最大跨步长度值】maxLengthValue
;
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