题目描述:
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x
和 y
,计算并返回它们之间的汉明距离
解法一:关键在于将x、y转化为等长二进制位
class Solution:
def hammingDistance(self,x,y):
cnt = 0
temp = 0
# [2:]的目的是去掉0b,[::-1]的目的是逆置数组,使得低位重合
x = list(bin(x))[2:][::-1]
y = list(bin(y))[2:][::-1]
len_X = len(x)
len_Y = len(y)
sub = abs(len_X-len_Y)
# 高位补零 方便比较
if len_X < len_Y:
while temp < sub:
x.append('0')
temp = temp + 1
else:
while temp < sub:
y.append('0')
temp = temp + 1
i = 0
while i < len(x):
if x[i] != y[i]:
cnt = cnt+1
i = i + 1
return cnt
解法二:位运算
统计两数不同的位:两数异或
统计一个数之中的“1”的个数:等于 x & (x-1) 直到0的次数
class Solution:
def hammingDistance(self,x,y):
ret = x ^ y
cnt = 0
while ret:
ret = ret & (ret - 1)
cnt += 1
return cnt
熟练使用位运算,可以使得代码简洁明了。