力扣461题:汉明距离
题目描述
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x
和 y
,计算并返回它们之间的汉明距离。
输入输出样例
输入:x = 1, y = 4
输出:2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。
输入:x = 3, y = 1
输出:1
解法一,使用异或与移位实现
class Solution{
public:
//利用异或的运算
//异或使得最后得到的位数,相同为0,不同为1
int hammingDistance(int x,int y)
{
int temp=x^y;
int res=0;
//移位实现比特位的计算
while(temp)
{
//与末尾的比特进行与运算
res+=temp&1;
//将异或的结果右移一位
temp>>=1;
}
return res;
}
};
解法二,使用异或与Brain Kernighan算法实现
//使用brain Kernighan算法
//记f(x)表示x和x-1进行与运算的结果(即,f(x)=x&(x-1)),则f(x)恰为x删去其二进制表示中最右侧的1的结果
class Solution2
{
public:
int hammingDistance(int x,int y)
{
int temp=x^y;
int res=0;
while(temp)
{
temp&=temp-1;
res++;
}
return res;
}
};