欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hamming Distance

程序员文章站 2024-03-19 08:28:52
...

求两个整数之间的汉明码距离,我想的是将其不断的右移,然后判断最低位是不是一样的。
代码如下:
题目来源

class Solution {
public:
    int hammingDistance(int x, int y) {
        int res = 0;
        while (x > 0 || y > 0) {
            if (x % 2 != y % 2)
                res++;
            x = x >> 1;
            y = y >> 1;
        }
        return res;
    }
};

然后想想实际上直接把两个数异或一下,然后判断有多少位是1。
代码如下:

class Solution {
public:
    int hammingDistance(int x, int y) {
        int dis = 0, n = x ^ y;
        while (n > 0) {
            if (((n >> 1) << 1) != n)//重点在这,通过左移再右移判断最后一位是不是1
                dis++;
            n >>= 1;
        }
        return dis;
    }
};

或者直接一行代码解决:

class Solution {
public:
    int hammingDistance(int x, int y) {
        return bitset<32>(x^y).count();
    }
};