LeetCode:汉明距离
一、题目描述
两个整数之间的汉明距离是指这两个数字对应二进制位不同的位置的数目。
给你两个整数x 和 y,计算并返回他们之间的汉明距离。
二、分析及代码实现
对于汉明距离问题我们其实可以将其转换为:计算x 和 y按位异或后求结果中1 的位数。
本题这里我们给出两种解题方法:
方法1:内置位计数功能
class Solution {
public int hammingDistance(int x, int y) {
return Integer.bitCount(x ^ y);
}
}
方法2:移位实现位计算
算法核心思想如下:
- 1、首先计算出x 按位异或 y,记作s = x ^ y;并新建计数器result用于记录s的二进制表示中1的位数
- 2、通过s 按位与 1 不断的检查 s的最低位,如果最低位为 1 ,那么令计数器加 1,然后我们令 s 的整体位右移 1 位,这样最低位就被舍弃,原本的次位变成了最低位。我们重复这个过程直到 s = 0 为止。这样计数器中就累计了 s 的二进制表示中1的数量。
上代码:
public int hammingDistance(int x, int y) {
int s = x ^ y;
int result = 0;
while (s != 0) {
result += s & 1; //s按位与1(按位与&:如果两个相应的二进制都为1,则该位的结果为1,否则为0)
s = s >> 1; //s二进制整体右移1位
}
return result;
}