码迷,mamicode.com
首页 > 其他好文 > 详细

461. 汉明距离

时间:2021-06-02 20:04:48      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:distance   res   有一个   gdi   没有   pre   bit   int   ++   

思路:
将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;
    }
};

461. 汉明距离

标签:distance   res   有一个   gdi   没有   pre   bit   int   ++   

原文地址:https://www.cnblogs.com/Mrsdwang/p/14837222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!