谨以此系列作为力扣题库学习
题目:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
汉明距离
定义:在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。
代码实现:
class Solution{
public:
int hammingDistance(int x,int y){
int count = 0;
if(x==y){
return 0
}
while(x!=0||y!=0){
if(x%2!=y%2){
count++
}
x=x/2
y=y/2
}
return count
}
class Solution(object):
def hammingDistance(self,x,y):
return bin(x^y).count('1')
速度最快
class Solution {
public:
int hammingDistance(int x, int y) {
uint32_t z = x ^ y;
z = (z & 0x55555555) + ((z >> 1) & 0x55555555);
z = (z & 0x33333333) + ((z >> 2) & 0x33333333);
z = (z & 0x0f0f0f0f) + ((z >> 4) & 0x0f0f0f0f);
z = (z & 0x00ff00ff) + ((z >> 8) & 0x00ff00ff);
z = (z & 0x0000ffff) + ((z >> 16) & 0x0000ffff);
return (int)z;
}
};
最后一个算法的解释:
一位变两位累加,然后2位变4位,4位变8位,8位变16位,最后16位变32位。其实是个加法运算