27 Hamming Distance

2021-08-18 16:02:48 浏览数 (2)

题目

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

因此实际操作算法为:

  1. x^y=z (z为int类型,但是z在二进制下1的个数就是我们想要的结果)
  2. 将z & 1的结果累加(判断当前最低位是否为1,如果是1,则z&1=1,反之为0)
  3. 将z右移一位
  4. 重复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);

0 人点赞