The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers
x
andy
, calculate the Hamming distance.Note:
0 ≤x
,y
< 231.Example:
Input: x = 1, y = 4 Output: 2 Explanation: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ The above arrows point to positions where the corresponding bits are different.
方法1: 借助字符串
public static int hammingDistance(int x, int y) {
String binStr = Integer.toBinaryString(x^y);
int nums = 0;
for (int i = 0; i < binStr.length(); i++) {
if (binStr.charAt(i) == '1') nums++;
}
return nums;
}
方法2: &运算
public int hammingDistance(int x, int y) {
int xor = x^y;
int nums = 0;
for (int i = 0; i < 31; i++) {
if ((xor & (1<<i)) > 0) nums++;
}
return nums;
}
方法3: 方法2的变形
public int hammingDistance(int x, int y) {
int xor = x^y;
int nums = 0;
while(xor != 0) {
//从低位开始检测
if((xor & 0x1) == 1) nums++;
xor >>= 1;
}
return nums;
}
方法4: 骚操作
public int hammingDistance(int x, int y) {
int xor = x^y;
int nums = 0;
while(xor != 0) {
nums++;
xor &= xor-1; //有几个1就可以操作几次
}
return nums;
}
知识点:1, 异或运算; 2, 二进制bit位为'1'的检测方法