两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

    给出两个整数 x 和 y,计算它们之间的汉明距离。

    注意:
    0 ≤ x, y < 231.

    示例:

    输入: x = 1, y = 4

    输出: 2

    解释:
    1 (0 0 0 1)
    4 (0 1 0 0)
    ↑ ↑

    上面的箭头指出了对应二进制位不同的位置。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/hamming-distance

    思路:
    看到题的第一个思路即比较每一位是否相同,异或也能帮我们达到这个目的。对于异或的结果移位&即可。
    复杂度分析:
    时间复杂度O(1) 最多循环32次,即常数。
    空间复杂度O(1)
    第一个思路:
    image.png
    异或移位
    image.png

    1. //最简单的思路
    2. var hammingDistance = function (x, y) {
    3. let cnt = 0;
    4. while (x > 0 || y > 0) {
    5. let reminder_x = x % 2;
    6. let reminder_y = y % 2;
    7. if (reminder_x !== reminder_y) {
    8. cnt++;
    9. }
    10. x >>>= 1;
    11. y >>>= 1;
    12. }
    13. return cnt;
    14. };
    15. //异或
    16. var hammingDistance = function (x, y) {
    17. let xor = x ^ y;
    18. let cnt = 0;
    19. while (xor) {
    20. if (xor & 1) {
    21. cnt++;
    22. }
    23. xor >>>= 1;
    24. }
    25. return cnt;
    26. };