汉明距离
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x
和 y
,计算它们之间的汉明距离。
思路:
当看到“对应二进制位不同的位置的数目“这句话的时候就可以想到用二进制计算中的异或运算
之后只要统计一下结果二进制表示中1的个数就行了,此时可以使用Integer中的 bitCount() 方法
查看了一下JavaApi,解释如下
-
bitCount
public static int bitCount(int i)
- Returns the number of one-bits in the two's complement binary representation of the specified
int
value. This function is sometimes referred to as the population count.
作用是返回 i 的二进制表示中1的个数
也可以用我下面的方法统计
class Solution {
public int hammingDistance(int x, int y) {
int sum = x^y;
int count;
for(count = 0; sum > 0; count++){
sum &= (sum - 1);
}
return count;
}
}
原理是:每次for循环,都将sum的二进制中最右边的 1 清除。
为什么呢?
因为从二进制的角度讲,n相当于在n - 1的最低位加上1。举个例子,8(1000)= 7(0111)+ 1(0001),
所以8 & 7 = (1000)&(0111)= 0(0000),清除了8最右边的1(其实就是最高位的1,因为8的二进制中只有一个1)。
再比如7(0111)= 6(0110)+ 1(0001),所以7 & 6 = (0111)&(0110)= 6(0110),清除了7的二进制表示中最右边的1(也就是最低位的1)。