题目:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。
如:输入 x = 1, y = 4 输出 2 因为 1(0 0 0 1) 4(0 1 0 0) 第二位和最后一位不同 所以累计汉明距离为2
思路:位运算
复杂度: 时间复杂度O(1) 空间复杂度O(1)
PS:该问题的思想与问题数组中数字出现的次数 (Offer 56 - I)的一小部分相同。
'''
题目:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。
如:输入 x = 1, y = 4 输出 2 因为 1(0 0 0 1) 4(0 1 0 0) 第二位和最后一位不同 所以累计汉明距离为2
思路:位运算 我们知道位运算 & 有过滤的功能。 所以可以将x y与 取值分别是(0001、0010、0100……)(可以用左移来实现)的m进行与运算,结果不同则计数加1,最终返回计数结果。
简化:既然是分别相与之后进行判断,则可以先使用异或位运算算出一个包含不同位表示为1的值,然后再进行相与。 为了方便控制迭代范围,可以将异或结果右移,而m不变。
复杂度: 时间复杂度O(1) (在 Python 和 Java 中 Integer 的大小是固定的,处理时间也是固定的。) 空间复杂度O(1)
'''
def hammingDistance(x, y):
m, count = 1, 0
n = x ^ y # 按位异或
while n:
if n & m == 1:
count += 1
n >>= 1
return count