题目
我的JS方法 转换成二进制字符串
有个地方不明白,toString(2).toString();
我直接写 toString()就不对
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function(n) {
var num=0;
n = n.toString(2);
for(var i = 0; i < n.length; i++){
if(n.charAt(i)==="1"){
num += 1;
}
}
return num;
};
别人的方法:逐位判断
JS
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function(n) {
let res =0;
while(n){
res = res+(n&1);
n = n >>> 1;
}
return res;
};
别人的位运算方法 巧用 n&(n−1)
解题思路
举个例子: 7的二进制位00111, 6的二进制位00110 ,那么00111&00110=00110,我们发现n&(n-1)每次可以消掉1个1,每次消掉一个1记录一下就可以统计出二进制中1的个数。
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function(n) {
let res =0;
while(n){
n = n&(n-1);
res++;
}
return res;
};