题目描述

请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。

第一种方法

直接遍历查询,最简单的方法,大家都能想到的。

// 第一种
var hammingWeight1 = function (n) {
let temp = n.toString(2);
let count = 0;
for (let i = 0; i < temp.length; i++) {
if (temp[i] == 1) {
count++;
}
}
return count;
};

第二种方法

正则匹配查询

// 第二种 正则
var hammingWeight2 = function (n) {
let temp = n.toString(2).match(/1/g);
return temp ? temp.length : 0;
}

第三种方法

将 n-1 与自身相与,进行一次计数器就 +1,直到为0.

// 第三种 位运算
var hammingWeight3 = function (n) {
let i = 0;
while (n) {
n = n & (n - 1);
i++;
}
return i;
}