1、逐位查找
我们最简单的思路就是查找二进制上的每一位判断是否为1。
class Solution {
public:
int hammingWeight(uint32_t n) {
int ret = 0;
for (int i = 0; i < 32; i++) {
if (n & (1 << i)) {
ret++;
}
}
return ret;
}
};
2、Brian Kernighan 算法
具体介绍同LeetCode-461-汉明距离。
我们可以每次去除当前二进制形式中最后一位1直至最终字符串的值为0。
class Solution {
public:
int hammingWeight(uint32_t n) {
int result = 0;
while (n != 0) {
n &= n - 1;
++result;
}
return result;
}
};