[アルゴリズム]プログラマLv 2以下の他のビットJS
2326 ワード
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;
}
簡単に考えるべきだったが、複雑に考えすぎた.
Reference
この問題について([アルゴリズム]プログラマLv 2以下の他のビットJS), 我々は、より多くの情報をここで見つけました https://velog.io/@rerang/Algorithm-DifferentBitLessThanTwoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol