TIL 64|JavaScriptアルゴリズム(プログラマの次の大きな数字JS)


問題のショートカット
問題の概要
条件nの次の大きな数字はnより大きい自然数である.
条件nの次の大きな数字とnがバイナリに変換されたときの1つの数は同じである.
条件nの次の大きな数字は条件1,2を満たす最小の数字である.
たとえば、78(1001110)の次の大きな数字は83(1010011)です.
自然数nがパラメータであると与えられたときにnの次の大きな数を返す解関数を完成する.
方法
初めて)ルールを見つけようとします.1の個数を同じにして、より大きな数にするために、2番目の位置1の位置を左に移動し、1,2番目の位置1を除いて、残りの1が右側から順に位置を埋め尽くすと、条件3が満たされる.いずれも1からなるバイナリ数であれば、1,2番目の「1」の間に0を追加する数が増えるため、コードが記述される.結果は問題で示した例にのみ合格し,正確性テストで誤った答えが現れた.
2回目の試み)はブルートフォース方式で説明した.nを1つ増やして2進数に変換し、最初の2進数nの1と等しい数が現れるまで比較する.
構文の使用
特定の文字(列)
  • を検索します.match(正規表現)
  • を使用
  • 特定文字(列)の数:.match(正規表現).length
  • バイナリ<>10進数変換:target.toString(2), parseInt(target,2)
    参考資料:バイナリの変換方法
  • 正しいコード
    function solution(n) {
        let count = 0;
        count = binCount(n);
        while(1){
            if(binCount(++n) === count){
                return n;
            }
        }
        return answer;
    }
    function binCount(num){
        const bin = num.toString(2)
        let countOne = bin.match(/1/gi).length;
        return countOne;
    }