一、题解1
1. 思路
- 对数字循环进行取模(奇偶判断)和除以2(无符号右移)的操作
- 使用位运算加快运算速度
2. 时间复杂度:O(logn) 其实就是二进制数的位数 l o g 2 n + 1 log_2n + 1 log2n+1
3. 空间复杂度:O(1)
4. 实现
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function(n) {
let result = 0;
while(n){
(n & 1) && result++; // 奇偶判断
n >>>= 1; // 无符号右移
}
return result;
};
二、题解2
1. 思路:利用 n & (n-1)
n & (n-1)
表示去除当前 n 最右边的 1 之后的数字
2. 时间复杂度:O(M) M为二进制数中1的个数
3. 空间复杂度:O(1)
4. 实现
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function(n) {
let result = 0;
while(n){
result++;
n = n & (n-1);
}
return result;
};