Solution 1
暴力检查,逐个位进行检查,然后计算其中1的个数。
- 时间复杂度: O ( log N ) O(\log N) O(logN),其中 N N N为输入数字,遍历每一位,总位数上界为32
- 空间复杂度: O ( 1 ) O(1) O(1),仅维护常数个状态量
class Solution {
public:
int hammingWeight(uint32_t n) {
int ans = 0;
while (n > 0) {
ans += (n & 1);
n >>= 1;
}
return ans;
}
};
Solution 2
【参考官方题解】
基于 n & (n - 1)
这个运算的“将n最后一个1变成0”的特性,以更少的循环次数完成计数。
- 时间复杂度: O ( k ) O(k) O(k),其中 k k k为输入数字中1bit的个数,其上界为 log N \log N logN
- 空间复杂度: O ( 1 ) O(1) O(1),仅维护常数个状态量
class Solution {
public:
int hammingWeight(uint32_t n) {
int ans = 0;
while (n > 0) {
n = n & (n - 1);
ans++;
}
return ans;
}
};
Solution 3
Solution 1的Python实现
class Solution:
def hammingWeight(self, n: int) -> int:
# ans = bin(n).count('1')
ans = 0
while n > 0:
ans += (n & 1)
n >>= 1
return ans;
Solution 4
Solution 2的Python实现
class Solution:
def hammingWeight(self, n: int) -> int:
# ans = bin(n).count('1')
ans = 0
while n > 0:
n = n & (n - 1)
ans += 1
return ans;