leetcode.461. 汉明距离---位运算

461. 汉明距离

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

给出两个整数 x 和 y,计算它们之间的汉明距离。

注意:
0 ≤ x, y < 231.

示例:

输入: x = 1, y = 4

输出: 2

解释:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑

上面的箭头指出了对应二进制位不同的位置。

题解:

方法一(工程法):

JAVA:

class Solution {
    public int hammingDistance(int x, int y) {
        return Integer.bitCount(x ^ y);
    }
}

C:

int hammingDistance(int x, int y) {
    return __builtin_popcount(x ^ y);
}

方法二(循环位运算):

先把x和y异或了,这样我们只需要对一个数进行操作即可。
我们把每一位都遍历一遍即可得到答案。
那么怎么完成把二进制的每一位都单独拉出来呢?
我们可以对x^y的结果temp进行一个&1的操作,这样的话由于是对1进行&,由于二进制中1的前面若干位都是0,那么由于&运算的特殊性,其前面的位都不会被考虑,因为&需要保持都为1才为1,其他均为0。所以最后考虑的只有最后一位,然后每次比较完进行挪移即可。

JAVA:

class Solution {
    public int hammingDistance(int x, int y) {
        int sum = 0;
        int temp = x^y;
        while(temp>0){
            sum+=(temp&1);
            temp>>=1;
        }
        return sum;
    }
}

C:

int hammingDistance(int x, int y){
    int sum = 0;
    int temp = x^y;
    while(temp){
        if(temp&1==1){
            sum++;
        }
        temp >>=1;
    }
    return sum;
}

版权声明:本文为xiangguang_fight原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。