法一:与1,异或,右移
执行用时: 36 ms , 在所有 Python3 提交中击败了84.20% 的用户
内存消耗:14.6 MB , 在所有 Python3 提交中击败了 94.88% 的用户
class Solution:
def hammingDistance(self, x: int, y: int) -> int:
#右移与1
a=0
for i in range(32):
a+=((x&1)^(y&1))
x>>=1
y>>=1
return a
法二:内置函数法
项目中可直接使用,不用重复造轮子。
return bin(x^y).count('1')
法三:可直接异或
class Solution:
def hammingDistance(self, x: int, y: int) -> int:
xor=x^y
cnt=0
while xor!=0:
cnt+=(xor&1)
xor>>=1
return cnt
法四:布赖恩·克尼根算法
与的时候会直接跳过0,与一次,消一个1
执行用时: 32 ms , 在所有 Python3 提交中击败了95.71% 的用户
内存消耗: 14.8 MB , 在所有 Python3 提交中击败了52.14% 的用户
class Solution:
def hammingDistance(self, x: int, y: int) -> int:
xor=x^y
cnt=0
while xor!=0:
cnt+=1
xor&=(xor-1)
return cnt