191._number_of_1_bits.md 1.2 KB
Newer Older
K
KEQI HUANG 已提交
1
### 191. Number of 1 Bits
K
KEQI HUANG 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14

题目:

<https://leetcode.com/problems/number-of-1-bits/>


难度:

Easy


转成二进制,数1的个数

K
KEQI HUANG 已提交
15
```python
K
KEQI HUANG 已提交
16 17 18 19 20 21
class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """
K
KEQI HUANG 已提交
22
        return bin(n).count('1')
K
KEQI HUANG 已提交
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
```



有wikipedia的题目 [Hamming Weight]((https://zh.wikipedia.org/wiki/汉明重量))



用wikipedia的解法:

原理是在于每次使用x & x-1 总会把低位的数字给置0

比如 3 = 011  2 = 010  3 & 2 = 010 cnt =1

​	2 = 010  1 = 001  2 & 1 = 000 cnt = 2

比如 9 = 1001  8 = 1000  9&8 = 1000 cnt =1

​	8 = 1000  7 = 0111  8&7 = 0000 cnt = 2

> 减1操作将最右边的符号从0变到1,从1变到0,与操作将会移除最右端的1。如果最初X有N个1,那么经过N次这样的迭代运算,X将减到0。下面的算法就是根据这个原理实现的。

所以关键点是每次都会把最右边的1变成0.

 

AC代码



K
KEQI HUANG 已提交
53
```python
K
KEQI HUANG 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66
class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """
        cnt = 0
        while n != 0:
        	n &= n - 1
        	cnt += 1
        return cnt 
```