二进制中1的个数
题目描述:
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 [汉明重量]
示例:
输入:n = 11 (控制台输入 00000000000000000000000000001011) 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
解法:
/**
* @param {number} n - a positive integer
* @return {number}
*/
// 解法1:借助字符串和数组的转化
var hammingWeight = function(n) {
const res=n.toString(2);
return res.split('0').join("").length
};
// 解法2:位运算--按位比较
var hammingWeight = function(n) {
let res=0;
for(let i=0;i<32;i++){
if(n&(1<<i)){
res++;
}
}
return res;
};
// 解法3:位运算优化--利用n&n-1 每次去掉一个1 看看循环了多少次变为0
var hammingWeight = function(n) {
let res=0;
while(n){
n&=n-1;
res++;
}
return res;
};
写在后面的话:
位运算真的很有魔力 太巧妙了 题目链接:leetcode.cn/problems/er…