Problem

Write a function that takes an unsigned integer and returns the number of ’1’ bits it has (also known as the Hamming weight).

For example, the 32-bit integer ’11’ has binary representation 00000000000000000000000000001011, so the function should return 3.

Remark

这个题总归还是很简单的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """
        
        i = 1 << 32
        count = 0
        
        while n > 0:
            if n >= i:
                count += 1
                n -= i
            i >>= 1

        return count

n &= n - 1 就会使二进制n,1的个数少一个,很神奇。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """
        
        count = 0
        while n > 0:
            n &= n - 1
            count += 1

        return count