leetcode——191 位1的个数
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
解题思路
1. 用python中的bin()
def hammingWeight(self, n: int) -> int:
b = bin(n)
return b.count('1')
2. 位运算
位运算符 | 说明 |
---|---|
<< | 按位左移,左移动n位相当于乘以2的n次方 |
>> | 按位右移,右移动n位相当于除以2的n次方 |
& | 按位与,二进制位数同为1结果位为1 |
| | 按位或,二进制位数或有1结果位为1 |
^ | 按位异或,二进制位数不同结果为1 |
~ | 按位取反,二进制位0和1结果位互换 |
逐位判断,设二进制数字n
如果
n
&
1
=
0
n\&1=0
n&1=0,则二进制最右一位为0
如果
n
&
1
=
1
n\&1=1
n&1=1,则二进制最右一位为1
可以根据这个特点,循环判断。判断n最右一位是否为1,根据结果计数。并且右移一位。
def hammingWeight(self, n: int) -> int:
count = 0
while n > 0:
count += n & 1
count >>= 1
return count
3. 使用 n & ( n − 1 ) n\&(n-1) n&(n−1)
(
n
−
1
)
(n-1)
(n−1) 二进制数字n最右边的1变成0,此1右边的0都变成1
n
&
(
n
−
1
)
n\&(n-1)
n&(n−1)二进制数字n最右边的1变成0,其余不变
def hammingWeight(self, n: int) -> int:
count = 0
while n > 0:
count += 1
count &= (n-1)
return count