191. 位1的个数

image.png

位运算

  1. public class Solution {
  2. // 00000000000000000000000000001011
  3. // 最高遍历 32 次,使用位运算判断最低位是否为 1,如果是则 count + 1,然后 n 右移一位
  4. // 优化点:如果 n 右移之后等于 0 就不用再遍历了
  5. public int hammingWeight(int n) {
  6. int count = 0;
  7. for (int i = 0; i < 32; i++) {
  8. if ((n & 1) == 1) {
  9. count ++;
  10. }
  11. n >>= 1;
  12. }
  13. return count;
  14. }
  15. }

位运算优化

public class Solution {

    public int hammingWeight(int n) {
        int count = 0;
        while (n != 0) {
            n &= (n - 1);
            count ++;
        }
        return count;
    }
}