LeetCode(868)——バイナリピッチ(JavaScript)


正の整数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;
        }
    };