美文网首页LeetCode
461. 汉明距离

461. 汉明距离

作者: 闭门造折 | 来源:发表于2018-11-07 01:15 被阅读5次

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。

注意:

0 ≤ x, y < 231.

示例:

输入: x = 1, y = 4
输出: 2

解释:

1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。

思路:

x和y按位异或,得到所有不同的位
模二取余,余数累加

具体代码:

class Solution {
public:
    int hammingDistance(int x, int y) {
        int z = x ^ y; //按位异或
        int res = 0;   //结果
        while(z){ //遍历z每一位
            if(z % 2){ //假设z最低位为1
                res++; //结果++
            }
            z /= 2;  //z抹去最后一位
        }
        return res; //返回结果
    }
};

代码借鉴:

百度发现了一个新颖的写法
参考资料《leetCode:461 汉明距离》

class Solution {
    public int hammingDistance(int x, int y) {
        int sum = x ^ y;
        int count;
        for(count = 0; sum > 0; count++){
            sum &= (sum - 1);
        }
        return count;
    }
}

其中关键一句是 sum &= (sum - 1)
这句话的作用是,删除sum从右起第一个1
证明:
加入sum形如xxxx1,
则sum - 1形如xxxx0
做与运算后,结果为xxxx0,末尾的1被删去了

假设sum形如xxxx100...00
则sum - 1形如xxxx011...11
做与运算后,结果为xxxx000...00,可以观察到,末尾的1被删去了

这个方法执行for循环,效果也很不错,也不用添加额外的if判断了

相关文章

  • LeetCode 461.汉明距离

    ?博客原文 :《LeetCode 461.汉明距离 - JavaScript》 汉明距离定义:两个整数之间的汉明距...

  • TOP 91 - 95

    461. 汉明距离[https://leetcode-cn.com/problems/hamming-distan...

  • 力扣每日一题:461.汉明距离 细说异或与二进制 双解!

    461.汉明距离[https://leetcode-cn.com/problems/hamming-distanc...

  • 461. 汉明距离

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数x和y,计算它们之间的汉明距离。注...

  • 461. 汉明距离

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距...

  • 461. 汉明距离

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明...

  • 461.汉明距离

    题目描述 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们...

  • 461. 汉明距离

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明...

  • 461. 汉明距离

    解法 异或运算,计算完以后再算计算结果中有几个1,就是不同的二进制数。 更快的算1的方法

  • 461. 汉明距离

    一 题目: 二 思路: 位运算,详细直接看代码吧 三 代码:

网友评论

    本文标题:461. 汉明距离

    本文链接:https://www.haomeiwen.com/subject/acfmxqtx.html