根据数字二进制下 1 的数目排序

解题思路:

  1. 此题的考点就是怎么判断出一个数字的二进制有几个 1;

  2. 式子 n = n&(n-1),例如 n=10110 ,则 n-1=1010,相与之后:10100,将 10110变成了10100,即去掉了 n 的最后一个 1;

  3. n&(n-1)所表示的含义为:将最后一位 1 变成 0;

图解:

代码实现

var sortByBits = function (arr) {
    // 计算n的二进制中1的数量
    const bitCount = n => {
        let count = 0;
        while (n) {
            n &= (n - 1); // 清除最低位的1
            count++;
        }
        return count;
    }

    // 如果有差,则按 bits 数排,如果无差,则按原值排
    return arr.sort((a, b) => bitCount(a) - bitCount(b) || a - b);
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 根据数字二进制下 1 的数目排序
  2. 2. 解题思路:
  3. 3. 图解:
  4. 4. 代码实现