Leetcode461–汉明距离
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
作者:黑暗主宰
邮箱:[email protected]
原题链接:
https://leetcode-cn.com/problems/hamming-distance/ (中文)
https://leetcode.com/problems/hamming-distance/ (英文)
题目描述:
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.
示例 1: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ |
---|
根据题意可以知道,汉明距离就是两个数字转化为二进制后,对应的进制位不相同的元素的个数,就如题中举的例子那样。对于进制找不同,小伙伴们可能很容易想到异或运算,然后统计异或运算后对应的二进制的1的个数,就是题目中的汉明距离。统计位1的个数可以参考我的这篇博客Leetcode191–位1的个数(含多种解法和图解分析),如果看不懂下面的源码可以去参考我的这一篇博客
然后知道了解题思路后,代码就很好写了,如下
方法1:
def hammingDistance(x, y):
h = x^y
cnt = 0
while h:
cnt += 1
h = h&(h-1)
return cnt
方法2:
def hammingDistance(x, y):
n = x^y
count = 0
flag = 1
for i in range(32):
if n & flag:
count += 1
flag = flag << 1
return count
方法3:
def hammingDistance(x, y):
n = x^y
count = 0
while n:
if n & 1 == 1:
count += 1
n = n >> 1
return count
方法4:
在不考虑时间效率的情况下,也可以一行代码搞定这道题
def hammingDistance(x, y):
return str(bin(x^y)).count('1')
详细的上面的一行代码等价于下面的一段代码
def hammingDistance(x, y):
num = x^y
num = bin(num)
res = num[2:]
dis = 0
for i in range(len(res)):
if res[i] == '1':
dis += 1
return dis
注: 文中有写错的地方,欢迎大家不吝指正!!!