两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.
示例:
输入: x = 1, y = 4
输出: 2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。
思路:
先做异或^ 运算,相同得0 ,相反得1,所以该题变成了求x异或y所得结果的1的个数。
时间复杂度:O(1),在 Java 中 Integer 的大小是固定的,处理时间也是固定的。 32 位整数需要 32 次迭代。
空间复杂度:O(1)。
public int hammingDistance(int x, int y) {
//异或运算 相同得0 相反得1
int num = x ^ y;
int res = 0;
while (num != 0) {
int flag = num & 1;
if (flag==1){
res ++;
}
num = num >> 1;
}
return res;
}