【LeetCode-位运算】汉明距离

题目描述

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 2^31.
示例

输入: x = 1, y = 4

输出: 2

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

上面的箭头指出了对应二进制位不同的位置。
**题目链接**:https://leetcode-cn.com/problems/hamming-distance/

思路

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目,如果两个二进制位不同,那么它们异或的结果就是 1,相同就是 0,也就是0^0=0, 1^1=0, 0^1=0, 1^0=1。我们首先求输入的两个数字的异或结果 xorResult,如果xorResult&1=1的话,说明 xorResult 的最后一位是 1,将 xorResult 每次向右移动一位,判断与 1 的结果,记录结果为 1 的次数即可。代码如下:

class Solution {
public:
    int hammingDistance(int x, int y) {
        int xorResult = x^y;
        int cnt = 0;
        while(xorResult){
            if(xorResult&1==1) cnt++;
            xorResult = xorResult>>1;
        }
        return cnt;
    }
};
  • 时间复杂度:O(logn)
  • 空间复杂度:O(1)