剑指 Offer 15. 二进制中1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)
n & (n−1)结果为把 n 的二进制位中的最低位的 1 变为 0 之后的结果。当前的 nn与 n - 1做与运算,直到 n 变为 0 即可。因为每次运算会使得 n 的最低位的 1被翻转,因此运算次数就等于 n 的二进制位中 1 的个数。
class Solution {
public:
int hammingWeight(uint32_t n) {
int count = 0 ;
while( n)
{
n &=( n-1);
count++;
}
return count;
}
};
复杂度分析
时间复杂度:O(logn)。循环次数等于 n的二进制位中 1 的个数,
空间复杂度:O(1)