LeetCode Hamming Distance
先贴题目
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, 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.
也就是说将这两个数转化为二进制后不同位数的个数就称为Hamming Distance。那么第一个思路是从右往左逐个比较每一位是否相同。几个关键点是:
- 比较每个位置是否相同可以对2取余数
- 比较结束的条件是较大数右移后已经为0
- 每次比较后需要右移一位
分析完毕,代码如下:
public static int hammingDistance(int x, int y){
int distance = 0;
int max = x > y? x:y;
int min = x <= y? x:y;
while(max>0){
if(max%2 != min%2){
distance += 1;
}
max = max >>> 1;
min = min >>> 1;
}
return distance;
}
还有一个思路更加简洁,既然要比较两个数不同的位数,可以利用异或运算,这样运算后直接数一数有几个1就可以了。需要注意的是统计有几个1的时候可以直接和1进行&运算。代码如下
public static int hammingDistance2(int x, int y){
int k = x ^ y;
int distance = 0;
while(k>0){
distance += k&1;
k = k >>> 1;
}
return distance;
}