设为首页 加入收藏

TOP

leadcode的Hot100系列--461. 汉明距离
2019-06-28 02:06:06 】 浏览:36
Tags:leadcode Hot100 系列 --461. 距离

求两个数的二进制位不同的位置,最先想到的就是异或操作

异或:按位运算,相同为0,不同为1。

比如:
a = 6 对应的二进制表示为: 0 0 1 1 1
? b = 9 对应的二进制表示为: 0 1 0 0 1
则 a ^ b = 14 对应的二进制表示为: 0 1 1 1 0
所以,只要算出异或之后的数的二进制表示方法里面1的个数。
比如,对于上面的异或之后为14,14的二进制里面1的个数为3,那么汉明距离就是3。
想知道是否有1,最快的当然还是位与操作

与:按位运算,相当于乘法,0与0是0,1与0是0,0与1是0,1与1是1。

所以,任何值与1相与,得到的就是就是原值二进制的最后一位
要么是1,要么是0,
这样就能得到原值的最低位是否是1。
然后再把原值整体右移一位,再查看最低位是否是1,
循环往复,就能够算出原值二进制里面1的个数了。
附上代码:

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



编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇leadcode的Hot100系列--136. 只出.. 下一篇leadcode的Hot100系列--序

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }