题目
题解一:异(^)运算
//直接将两数异(^)运算 0 0 ->0 1 0 ->1 二进制为相同为0 不同为1 ,然后将二进制转换为字符串 统计里面1 的个数
public static int hammingDistance(int x, int y) {
// ^异运算 0 0 1 1
// 1 0 0 1
// -----------
// 1 0 1 0
//直接将两数异(^)运算 0 0 ->0 1 0 ->1
int number = x^y;
//将number转换为 二进制 在放入字符数组里面
String string = Integer.toBinaryString(number);
char[] chars = string.toCharArray();
// char是基本数据类型,直接用==就可以进行比较
int m = 0 ; //记录距离
//直接统计1的个数 就代表两个数的二进制数的不同
for (int i = 0; i < chars.length; i++) {
if (chars[i]=='1') {
m++;
}
}
return m;
}
题解二:内置方法Integer.bitCount(x ^ y)
java-----内置方法Integer.bitCount(x ^ y) 直接得出二进制1的个数
public static int hammingDistance(int x, int y) {
return Integer.bitCount(x ^ y);
}
题解三:异运算 辗转消除
/**
* 辗转相除法 得出余数 计数
* @param x
* @param y
* @return
*/
public static int hammingDistance(int x, int y) {
// return Integer.bitCount(x ^ y);
int xor = x ^ y;
int count = 0; // 用count来记录个数
while (xor != 0) {
if (xor % 2 == 1) {
count++;
}
xor /= 2;
}
return count;
}