Skip to main content

位 1 的个数

Tips

题目

编写一个函数, 输入是一个无符号整数(以二进制串的形式), 返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)

示例
输入: 00000000000000000000000000001011

输出: 3
输入: 00000000000000000000000010000000

输出: 1

题解

使用 n & (n - 1)

关于使用 n & (n - 1), 这里不再赘述, 可访问 位运算的一些技巧.

/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function (n) {
let res = 0

// 依次把二进制的最后一个 1 变为 0
while (n !== 0) {
// 用于把二进制的最后一个 1 变成 0
n = n & (n - 1)
res++
}

return res
}

直接判断二进制最低位的数是不是 1

var hammingWeight = function (n) {
let ans = 0
while (n) {
ans += n & 1
n >>= 1
}
return ans
}

除 K 取余法

var hammingWeight = function (n) {
let ans = 0
while (n) {
ans += n % 2
n >>= 1
}
return ans
}