15.二进制中 1 的个数 (Easy)*
题目描述*
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
示例*
两种方法,右移统计 1 个数,或 n & (n - 1) 每次会去掉 n 的末位 1。
不过使用右移统计 1 的个数,输入负数会导致无限循环,所以可以把 1 左移判断每一位。
类似问题:
- 判断一个数是否是 2 的整数次方,即二进制只有一个 1,只要 n & (n - 1) 为 0 即可。
- 判断整数 m 和 n 的二进制相差多少位,先异或,然后统计二进制 1 的个数。
class Solution {
public:
int hammingWeight(uint32_t n) {
int cnt = 0;
while(n){
// cnt += n&1;
// n = n >> 1;
cnt++;
n &= n - 1;
}
return cnt;
}
};
最后更新: July 23, 2022