2021 年 06 月 31 日 链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/submissions/
题目
描述
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
示例
示例 1:
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。
示例 2:
输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 ‘1’。
示例 3:
输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 ‘1’。
提示
-
解答
解答1
i 从 0 开始计算,将 n 的在二进制中的当前位 i 与 2^i 进行与计算,如果当前位不是 1 则返回 0,如 i= 2 时 2^3 二进制为 1000 只有当 n 的第 3 位为 1 时进行与计算才不为 0
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function(n) {
let ret = 0
for(let i = 0; i < 32; i ++){
if((n & (1 << i)) !== 0){
ret ++
}
}
return ret
};
解答2
对 n & (n - 1) 进行位运算,则将 n 的二进制中的最低位的 1 变为 0
使用正则表达式解
/** * @param {number} n - a positive integer * @return {number} */ var hammingWeight = function(n) { return (n.toString(2).match(/1/g) || '').length };