1.トピック
1356. バイナリの 1 の数で並べ替え
2.アイデア
- 数値 num のバイナリ表現で 1 の数を計算する get1Cnt 関数を定義します。
- 2 進数の 1 の数を数える方法は、2 進数 num の最後のビットを連続的に取り出し、1 の場合はカウンター a に 1 を加え、num を 1 ビット右にシフトすると、つまり、2 進数の各ビットは num が 0 になるまでトラバースします。
- ソートは、数値の 2 進数表現で 1 の数が異なる場合は、1 の数に従って小さいものから大きいものへとソートし、同じ場合は、数値自体の大きさに従って大きいものから小さいものへとソートします。 .
3. コードの実装
var sortByBits = function(arr) {
function get1Cnt(num) {
let cnt = 0
while (num) {
cnt += num & 1
num >>= 1
}
return cnt
}
return arr.sort((a, b) => {
return get1Cnt(a) !== get1Cnt(b) ? get1Cnt(a) - get1Cnt(b) : a - b
})
};
4. 参考
コードは簡潔で、優れたソリューションです