链接:https://leetcode-cn.com/problems/hamming-distance/
难度:容易
题目描述
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.
示例
输入: x = 1, y = 4
输出: 2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑上面的箭头指出了对应二进制位不同的位置。
题解:
题目说到“二进制不同的位”,最应该想到使用“异或(XOR)”。那么,异或之后,我们怎样统计1的个数呢?
Java中的Integer提供了一个方法“Integer.bitCount()”,下面给出该函数的源码,本文不在详述该方法的计算过程,想深入研究的请移步Integer.bitCount()解析。
public static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}
代码
【Java】
class Solution {
public int hammingDistance(int x, int y) {
return Integer.bitCount(x ^ y);
}
}