考点
题解
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的个数
,这里使用耗时最短的分治法计算