LeetCode(868)——バイナリピッチ(JavaScript)
1390 ワード
正の整数
2つの連続する1がない場合は、
例1:入力:22出力:2説明:22のバイナリは0 b 10110です.22のバイナリ表現には、3つの1があり、2つの連続する1が構成されています.第一のペアの連続する1のうち、2つの1の間の距離は2です.第二のペアの連続する1のうち、2つの1の間の距離は1です.答えは二つの距離の中で一番大きいのは2です.
例2:入力:5出力:2解釈:5のバイナリは0 b 101です.
例3:入力:6出力:1説明:6のバイナリは0 b 110です.
例4:入力:8出力:0解釈:8のバイナリは0 b 1000です.8のバイナリ表現には連続する1がないので、0を返します.
ヒント:
N
が与えられ、N
の二進法表現のうちの2つの連続する1の間の最長距離が見つかって返される.2つの連続する1がない場合は、
0
に戻る.例1:入力:22出力:2説明:22のバイナリは0 b 10110です.22のバイナリ表現には、3つの1があり、2つの連続する1が構成されています.第一のペアの連続する1のうち、2つの1の間の距離は2です.第二のペアの連続する1のうち、2つの1の間の距離は1です.答えは二つの距離の中で一番大きいのは2です.
例2:入力:5出力:2解釈:5のバイナリは0 b 101です.
例3:入力:6出力:1説明:6のバイナリは0 b 110です.
例4:入力:8出力:0解釈:8のバイナリは0 b 1000です.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;
}
};