两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x
和 y
,计算它们之间的汉明距离。
注意:
0 ≤ x
, y
< 231.
示例:
输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。
思路:将两个数转化为bin(),再将其转化为字符串,从较短的字符串的最后开始判断不相同的数字个数,在较短的字符串比较完之后,较长字符串的剩余部分判断其为1的个数,相加就得汉明距离
code:
class Solution:
def hammingDistance(self, x, y):
"""
:type x: int
:type y: int
:rtype: int
"""
a=bin(x)
b=bin(y)
a1=str(a)
a2=str(b)
c1=len(a1)
c2=len(a2)
d=0
if a1=='0b0':
for i in range(2,c2):
if(a2[i]!='0'):
d+=1
return d
if a2=='0b0':
for i in range(2,c1):
if(a1[i]!='0'):
d+=1
return d
if a2=='0b0' and a1=='0b0':
return 1
elif c1>=c2:#当c1较长时
for i in range(-c2+2,0):#判断c2部分
if(a1[i]!=a2[i]):
d+=1
for i in range(2,c1-c2+2):#判断c1剩余部分
if(a1[i]=='1'):
d+=1
return d
elif c2>c1: #下同
for i in range(-c1+2,0):
if(a1[i]!=a2[i]):
d+=1
for i in range(2,c2-c1+2):
if(a2[i]=='1'):
d+=1
return d