两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

示例 1:
输入:x = 1, y = 4
输出:2
解释:
在这里插入图片描述
示例 2:
输入:x = 3, y = 1
输出:1

思路

可以发现汉明距离实际上就是求 “比特位不同的值的数量,因此我们可以用异或的性质!!!”
x ^ y 返回的值中比特位为 1 的地方说明 xx 与 yy 在改比特位的值不同。因此题目可以转化为:
“求 x ^ y 中 1 的数量!”

如何计算 x ^ y 中 1 的数量?不停的丢弃最低为的 1,然后 increment ans.
就一点需要点明,对于二进制数 xx 如何丢弃最低位的比特值?
公式: xx = xx & (x-1x−1).

假设 x = 5
x = 0101
x-1 = 0100
x & (x-1) = 0101 & 0100 = 0100
可以发现5原本的最低位的 1 被移除了

class Solution {
public:
    int hammingDistance(int x, int y) {
        int res=x^y;
        int count=0;
        while(res){
            res&=(res-1);
            count++;
            //res--;  //这里不用res--,前面的res-1,相当于res=res-1,已经减过了。
        }
        return count;
    }
};

版权声明:本文为weixin_49358890原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_49358890/article/details/119392390