给定一个正整数
N
,找到并返回
N
的二进制表示中两个连续的 1 之间的最长距离。
如果没有两个连续的 1,返回
0
。
示例1:
输入:22
输出:2
解释:
22 的二进制是 0b10110 。
在 22 的二进制表示中,有三个 1,组成两对连续的 1 。
第一对连续的 1 中,两个 1 之间的距离为 2 。
第二对连续的 1 中,两个 1 之间的距离为 1 。
答案取两个距离之中最大的,也就是 2 。
示例2:
输入:5
输出:2
解释:
5 的二进制是 0b101 。
示例3:
输入:6
输出:1
解释:
6 的二进制是 0b110 。
示例4:
输入:8
输出:0
解释:
8 的二进制是 0b1000 。
在 8 的二进制表示中没有连续的 1,所以返回 0 。
提示:
-
1 <= N <= 10^9
/**
* @param {number} N
* @return {number}
*/
var binaryGap = function(N) {
};
个人解法
var binaryGap = function(N) {
//取余法 4 -> [0,0,1]
var arr = [];
while(N !== 0){
arr.push(N % 2);
N = Math.floor(N / 2);
}
//如果arr有两个1
if(arr.indexOf(1 , arr.indexOf(1) + 1) > -1){
//max代表最大的距离
var max = arr.indexOf(1 , arr.indexOf(1) + 1) - arr.indexOf(1);
//去掉arr第一个1
arr.splice(arr.indexOf(1) , 1);
//如果还有两个1,则判断距离有没有比max大,比max大的话就把这个值赋值给max,然后再把第一个1去掉继续判断
while(arr.indexOf(1 , arr.indexOf(1) + 1) > -1){
if(arr.indexOf(1 , arr.indexOf(1) + 1) - arr.indexOf(1) > max){
max = arr.indexOf(1 , arr.indexOf(1) + 1) - arr.indexOf(1)
}
arr.splice(arr.indexOf(1) , 1);
}
return max;
}else{
//没有两个1就返回0
return 0;
}
};
版权声明:本文为weixin_42561383原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。