题目
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
Note:
代码语言:javascript复制0 ≤ x, y < 231.
Example:
代码语言:javascript复制Input: x = 1, y = 4
Output: 2
代码语言:javascript复制Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
The above arrows point to positions where the corresponding bits are different.
分析
题意:汉明距离,两个数的二进制数对应位不同的个数,比如上述例子,1的最后一位跟4的最后一位不同,1的第三位跟最后一位不同;因此汉明距离为2。
恰好,异或为真时为1,因此我们可以对两个数的每一位进行异或,最后对所有异或结果求和即可。
所以首先得将给的数字转换为2进制数,然后对每位进行异或,最后每位求和即可。
前置知识
在Java中(其他语言需要读者自行尝试), int 型的二进制运算(与或非异或等),会自动转换为二进制进行运算,最后将运算结果转为int型 如: 1^4=5 5&1=1
因此实际操作算法为:
- x^y=z (z为int类型,但是z在二进制下1的个数就是我们想要的结果)
- 将z & 1的结果累加(判断当前最低位是否为1,如果是1,则z&1=1,反之为0)
- 将z右移一位
- 重复2-3操作,直到z为零
解答
代码语言:javascript复制public int hammingDistance(int x, int y) {
int xor = x^y;
int res = 0;
while(xor!=0) {
res = xor & 1;
xor >>= 1;
}
return res;
}
直接调用工具类 Integer.bitCount,计算一个数在二进制状态下的1的个数
代码语言:javascript复制return Integer.bitCount(x ^ y);