Hamming Distance

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

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();
    }
};

你可能感兴趣的:(Hamming Distance)