461. Hamming Distance

题目描述和难度

  • 题目描述:

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

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

注意:
0 ≤ x, y < 231.

示例:

输入: x = 1, y = 4

输出: 2

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

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

思路分析

求解关键:异或运算得到的二进制中 1 的个数就是汉明距离。

  • 异或运算得到的结果 1 表示不同,正好为汉明距离贡献 1, 0 表示相同,改位对汉明距离没有贡献值。
  • 统计二进制 1 的个数可以使用 a & (a - 1) 直到这个数为 0,这是很常见的位运算的技巧了。

参考解答

参考解答1

public class Solution {

    public int hammingDistance(int x, int y) {
        int a = x ^ y;
        int count = 0;
        while (a != 0) {
            a = a & (a - 1);
            count++;
        }
        return count;
    }
}

本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0461-hamming-distance ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com