461. 汉明距离

思路:
将x和y不断移位和1相与进行判断是否相等,不等加一即可

class Solution {
public:
    int hammingDistance(int x, int y) {
        int MAX_BIT=30;
        int res=0;
        for(int i=0;i<=MAX_BIT;++i){
            if(((x>>i)&1)!=((y>>i)&1)) res++;
        }
        return res;
    }
};

先把x和y异或,让不相同的位置1.
我们知道一个数n与n-1相与,当n最低位没有1时,我们就会向高位借位,那么我们就能消除一个1。当n最低位有一个1时就能消去,那么不断进行就能将n的1消除。所以我们while进行循环,当n=0时,我们就计算完成了汉明距离。每次循环都算在消除一个1,所以循环一次计数一次。

class Solution {
public:
    int hammingDistance(int x, int y) {
        int now = x^y;
        int res=0;
        while(now){
            now = now&(now-1);
            res++;
        }
        return res;
    }
};
posted @ 2021-06-01 14:56  Mrsdwang  阅读(34)  评论(0编辑  收藏  举报