Day2 EP-461 Hamming distance

1.题目描述leetcode 461

Day2 EP-461 Hamming distance_第1张图片
海明距离

2.1 解决方式

class Solution {
public:
    int hammingDistance(int x, int y) {
        int count = 0;
        int re = x^y;
        for (int i = 31;i>=0;i--){
            if(re & (1 << i)){
                count++;
            }
        }
        return count;
        
    }
};

其实原题目相当于计算两个数二进制进行亦或运算,在c++中可以直接通过

re = x^y;

得到与运算之后的结果;然后计算结果中1的数目就是题目要求。
计算1的数目的时候使用了

if (re & (1 << i))

括号内部的数据其实是1左移i位和re进行与运算,从而可以判断re左起第i位是否为1,若是为1,则数目加1即可。

2.1 解决方式优化

在上面方式中我们实际上无论x和y的值为多少,都运行了31次,而实际上我们只要循环re的长度次就可以。所以进行下面的优化

class Solution {
public:
    int hammingDistance(int x, int y) {
        int count = 0;
        int re = x^y;
        while(re>0){
            count+= re&1;  //re和1进行与运算,判断最低位是不是1;
            re>>=1;//re右移一位
        }
        return count;      
    }
};

应该就是这样啦,继续加油啦。

你可能感兴趣的:(Day2 EP-461 Hamming distance)