461. 汉明距离

在这里插入图片描述
求不同的位数,很明显用异或。x和y直接异或,^的结果就是相同为0,不同为1,我们数1的个数即可。

class Solution {
public:
    int hammingDistance(int x, int y) {
        //^异或,不同为1;&与全1为1;|或全0为0
        //x和y直接做异或,看有几位1就行
        int a = x^y;
        int res = 0;
        while(a != 0){
            a = a&(a-1);
            res++;
        }
        return res;
    }
};

两种方法
法一:判断有几位不同的,和1做&1之后得到的数就是最后一位数,比完右移
法二:也是判断有几位不同,^是不同为1,异或之后判断有几个1就行了

class Solution {
public:
    int hammingDistance(int x, int y) {
        //看看有几位不同的,每次用最后一位比,然后消除最后一位,最后一位比就是和1做相与操作,就可以取得最后一位的值了
        // int a = 0, b = 0;
        // int res = 0;
        // while(x != 0 || y != 0){
        //     a = x&1;//&运算,全1为1,其余为0
        //     b = y&1;
        //     if(a != b) res++;
        //     x >>= 1;
        //     y >>= 1;
        // }
        // return res;

        //法二:x和y做异或操作,异或不同为1,相同为0,得到的结果有几个1就证明有几位不同
        int a = x ^ y;
        int res = 0;
        while(a != 0){
            a &= (a-1);
            res++;
        }
        return res;
    }
};

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