两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
方法一:使用bitCount()
class Solution {
public int hammingDistance(int x, int y) {
return Integer.bitCount(x ^ y);
}
}
方法二:移位
首先算出x和y的异或值,然后不断判断异或值rox最右一位是否为1,是则dis++
class Solution {
public int hammingDistance(int x, int y) {
int xor = x ^ y;
int dis = 0;
while(xor != 0){
if((xor & 1) == 1){
dis++;
}
xor = xor >> 1;
}
return dis;
}
}
方法三:布赖恩·克尼根算法
通过x & (x - 1)可以直接删除某个数的最右一位
class Solution {
public int hammingDistance(int x, int y) {
int xor = x ^ y;
int dis = 0;
while(xor != 0){
dis++;
xor = xor & (xor - 1);
}
return dis;
}
}