汉明距离
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。
解题思路:先分别把x和y转化为二进制,然后二进制数组对应位置的元素的异或结果相加,得到的就是汉明距离。
但是看到其他人做的,太简单了吧!
Integer中有一个方法bitCount(),用来统计整数对应的二进制数中1的个数。
对于本题的做法(一行代码就完事)。不得不说,Java中有很多很神奇的函数,太6了。
public int hammingDistance(int x, int y) {
return Integer.bitCount(x^y);
}
我自己的思路,先把x和y转化为二进制,然后将两个字符串补0至一样长。最后把二进制数组对应位置的元素的异或结果相加,就可以得到汉明距离。代码有点多。
public int hammingDistance(int x, int y) {
int s=0;
String a=Integer.toBinaryString(x);
String b=Integer.toBinaryString(y);
int al=a.length(),bl=b.length();
int len=al>bl?al:bl;
if (al>bl){
for (int i=0;i<al-bl;i++)
b="0"+b;
}else {
for (int i=0;i<bl-al;i++){
a="0"+a;
}
}
for (int i=0;i<len;i++){
s+=((a.charAt(i)-'0')^(b.charAt(i)-'0'));
}
return s;
}