Leetcode 461. 汉明距离 位运算


地址 https://leetcode-cn.com/problems/hamming-distance/

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

示例 1:
输入:x = 1, y = 4
输出:2
解释:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑
上面的箭头指出了对应二进制位不同的位置。


示例 2:
输入:x = 3, y = 1
输出:1
 
提示:
0 <= x, y <= 231 - 1

解答
位运算 二进制下逐位计算,查看两个数该位是否一个为1一个不为1,则记录进答案。
另外要考虑,x y二进制下位数不一致 比如一个是 1010 一个是1101010101;
那么有额外位数的数字带有1的位置均加入答案。

上述思路 例子1的分析就是 1和4

    1
1 0 0

有两位,在二进制下一个为1 一个不为1

例子2的分析是 3 和1

  1
1 1

有一位 在二进制下一个为1 一个不为1

代码如下

class Solution {
public:
    int hammingDistance(int x, int y) {
        int ans =0;
        while(x!=0 && y!=0){
            int a = x&1;
            int b = y&1;
            if(a!=b){ans++;}
            x>>=1; y>>=1;
        }
        int left =0;
        if(x==0){
            left=y;
        }else if(y==0){
            left=x;
        }
        while(left!=0){
            if(left&1){
                ans++;
            }
            left>>=1;
        }
        return ans;
    }
};

我的视频题解空间