1、题目如下:
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.
示例:
输入: x = 1, y = 4
输出: 2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。
2、解题思路如下:
本题目是输入两个数字计算两个数字转换为二进制后,对应位置数字的不同的个数。所以可以将这两个数字转换为二进制后进行按位比较即可。这是比较普通的解法。其实这道题考的重点不是这个,而是异或运算和按位与运算。异或运算的特点就是对应二进制位相同则为0,反之为1。所以可以采用异或运算统计出两个数字对应二进制位不同的个数。然后使用与运算进行按位统计个数即可。
3、代码如下:
class Solution {
public int hammingDistance(int x, int y) {
int ans=x^y,count=0;
while(ans!=0){
count++;
ans&=(ans-1);
}
return count;
}
}
public class MainClass {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
int x = Integer.parseInt(line);
line = in.readLine();
int y = Integer.parseInt(line);
int ret = new Solution().hammingDistance(x, y);
String out = String.valueOf(ret);
System.out.print(out);
}
}
}
4、运行结果如下: