两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

给出两个整数 x 和 y,计算它们之间的汉明距离。

注意:
0 ≤ xy < 2^31.

示例:

输入: x = 1, y = 4
输出: 2
解释:1   (0 0 0 1)
     4   (0 1 0 0)
            ↑   ↑
上面的箭头指出了对应二进制位不同的位置。

答案:

1public int hammingDistance(int x, int y) {
2    int dist = 0, n = x ^ y;
3    while (n != 0) {
4        ++dist;
5        n &= n - 1;
6    }
7    return dist;
8}

解析:

异或就行了,然后再计算异或之后1的个数,或者最简单的一种方式,如下

1public int hammingDistance(int x, int y) {
2    return Integer.bitCount(x ^ y);
3}

如果不满意还可以一个个计算,代码如下

1    public int hammingDistance(int x, int y) {
2    int count = 0;
3    while (x != 0 || y != 0) {
4        count += (x ^ y) & 1;
5        x >>>= 1;
6        y >>>= 1;
7    }
8    return count;
9}

反正解法比较多,也都比较简单。