461. 汉明距离

考点

  • 异或技巧
  • bitCount的实现

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
private:
int bitCount(int n) {
n = (n & 0x55555555) + ((n >> 1) & 0x55555555);
n = (n & 0x33333333) + ((n >> 2) & 0x33333333);
n = (n & 0x0f0f0f0f) + ((n >> 4) & 0x0f0f0f0f);
n = (n & 0x00ff00ff) + ((n >> 8) & 0x00ff00ff);
n = (n & 0x0000ffff) + ((n >> 16) & 0x0000ffff);
return n;
}

public:
int hammingDistance(int x, int y) {
return bitCount(x ^ y);
}
};

时间复杂度:\(O\left( \log k \right)\),其中\(k\)int的位数,在这里是32位

空间复杂度:\(O\left( 1 \right)\)

思路

两个数的不同位直接通过异或运算即可获得

计算整数1个数bitCount实现请参见191. 位1的个数,这里使用耗时最短的分治法计算