0%

461. 汉明距离

461. 汉明距离

直接移位
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
int hammingDistance(int x, int y) {
x ^= y;
int ret = 0;
while(x)
{
ret += x & 1;
x >>= 1;
}
return ret;
}
};
只遍历1
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
int hammingDistance(int x, int y) {
x ^= y;
int ret = 0;
while(x)
{
x &= x - 1;
++ret;
}
return ret;
}
};

x-1会将x中最近的一个1变成0,而这个1左边的全变成1。

所以x&x-1会使得这个最近的1及其右边全都变成0,而左边保持不变,则每次都如此操作,循环次数就是1的个数