1 题目描述
2 解题思路
2.1 方法1:计算x和y的异或,输入位不同的时候,输出为1
lass Solution:
def hammingDistance(self, x: int, y: int) -> int:
tmp=x^y
ret=bin(tmp)
return(ret.count('1'))
class Solution:
def hammingDistance(self, x: int, y: int) -> int:
tmp=x^y
ret=bin(tmp)
num=0
for i in ret:
if(i=='1'):
num+=1
return(num)
2.2 方法2 用移位操作代替count函数
class Solution:
def hammingDistance(self, x: int, y: int) -> int:
tmp=x^y
num=0
while(tmp!=0):
if(tmp&1==1):
num+=1
tmp=tmp>>1
return(num)
2.3 方法3:布莱恩-科尼根算法
当我们在number和number-1上做and位运算的时候,原数字最右边等于1的那一比特会被移除。
这样做所需的时间比方法2小(方法2是每一位都要考虑)。
class Solution:
def hammingDistance(self, x: int, y: int) -> int:
tmp=x^y
num=0
while(tmp!=0):
tmp=tmp&(tmp-1)
num+=1
return(num)