461. 汉明距离
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数x
和y
,计算它们之间的汉明距离。
注意:
0 ≤x
,y
< 231.
示例:
输入: x = 1, y = 2
输出: 2
解法1
将x, y的二进制转成字符串逐一比对.
class Solution:
def hammingDistance(self, x, y):
str_x = str(bin(x))[2:]
str_y = str(bin(y))[2:]
i = 1
distance = 0
while i <= len(str_x) and i <= len(str_y):
if str_x[-i] != str_y[-i]:
distance += 1
i += 1
remain = max(len(str_x)-i+1,len(str_y)-i+1,0)
long_s = ""
if len(str_x) > len(str_y):
long_s = str_x
else:
long_s = str_y
for i in range(remain):
if long_s[i] == "1":
distance += 1
return distance
解法2
用字符串的zfill()
函数补充高位, 简化比较流程.
class Solution:
def hammingDistance(self, x, y):
str_x = str(bin(x))[2:]
str_y = str(bin(y))[2:]
str1 = str_x.zfill(32)
str2 = str_y.zfill(32)
distance = 0
for i in range(32):
if str1[i] != str2[i]:
distance += 1
return distance
解法3
用异或运算的特性, 相同位为0, 不同位为1, 只要算出异或结果的1的个数就行了.
class Solution:
def hammingDistance(self, x, y):
xor = list(bin(x^y))
return xor.count('1')
网友评论