算法
(位运算) $O(logn)$
这题可以通过移位数字来实现,也就是要么是移动原数字,要么是移动$1$,这次我们不移动任何数字来计算。在为运算中有这样一个操作,就是$n\&(n-1)$可以把$n$最右边的$1$给消掉。举个例子,当$n=12$的时候,我们来画图看一下:
明白了这个知识点,代码就容易写了,我们通过递归计算,不断的把$n$右边的$1$给一个个消掉,直到$n$等于$0$为止。
Java 代码
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
return n == 0 ? 0 : hammingWeight(n & (n - 1)) + 1;
}
}