题目描述:
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
示例:
输入: x = 1, y = 4
输出: 2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。
思路:
- 用位运算区分出不同的位
- 统计不同位的个数
那么如何区分出不同的位?这里肯定用的是位运算。位运算包括(与、或、非、异或)
依次看一下位运算:
- 与运算
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
0 & 0 = 0
可以看到这个区分不出来不同的位。 - 或运算
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1
0 | 0 = 0
这个也区分不出来不同的位 - 非运算,肯定用不了
- 异或运算
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
所以用异或操作可以得到一个二进制序列,
比如:x=1,y=4
1 (0 0 0 1)
4 (0 1 0 0)
x^y=0101
然后只需要统计这个序列有几个1就可以了,这就转换成了剑指offer的原题:二进制中1的个数
https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/
代码如下:
public int hammingDistance(int x, int y) {
int count=0;
int temp = x^y;
//统计二进制中1 的个数
while (temp!=0) {
count++;
temp = temp & (temp - 1);
}
return count;
}
版权声明:本文为Gabbana原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。