[アルゴリズム]プログラマLv 2以下の他のビットJS


https://programmers.co.kr/learn/courses/30/lessons/77885

2つ以上のビットの問題



>>初期コード

function solution(numbers) {
    var answer = [];
    let zero = "000000000000000000000000000000000000000000000000000000"
    numbers.forEach((ele, idx)=>{
        let numberBit = (ele).toString(2);
        let numberBitArr = (zero.slice(0, zero.length-numberBit.length)+numberBit).split("");

        let i = 1;

        while(answer.length < idx+1){
            let isDifferent = [];
            let compareBit = (ele+i).toString(2);
            let compareBitArr = (zero.slice(0, zero.length-compareBit.length)+compareBit).split("");
            
            for(let j=0; j<zero.length;j++){
                isDifferent.push(numberBitArr[j] == compareBitArr[j]);
            }
            
            if(isDifferent.filter(ele=>ele==false).length<3) answer.push(ele+i);
            else i++;
        }
    })

    return answer;
}

>>コード

function solution(numbers) {
    var answer = [];


    numbers.forEach(ele=>{
        let numberBitArr = ("0"+ele.toString(2)).split("");
        let answerBitString;

        if(numberBitArr[numberBitArr.length-1] == "0"){
            numberBitArr[numberBitArr.length-1] = 1;
            answerBitString = numberBitArr.join("");
            answer.push(parseInt(answerBitString, 2));
        } 
        else{
            let numberBit = numberBitArr.join("");
            let changeIndex = numberBit.lastIndexOf("01");
            answerBitString = (numberBit.substring(0,changeIndex) + "10" + numberBit.substring(changeIndex+2));
            answer.push(parseInt(answerBitString, 2));
        }
    })

    return answer;
}

簡単に考えるべきだったが、複雑に考えすぎた.