位 1 的个数
问题:
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
思路:
通过前人发现,n & ( n - 1 ) 这个式子总是把 n 的最低位 1 变为 0.
例: 7 → 111
7 - 1 = 6 → 110 → 7 & 6 == 110
10 == 1010
10 - 1 == 9 → 1001
10 & 9 == 1000
- 故可根据此式将 n 的所有位逐一变为 0,并计数。
class Solution {
public:
int hammingWeight(uint32_t n) {
auto num = 0;
while(n) {
n &= n - 1;
num++;
}
return num;
}
};