P461汉明距离


个人思路

  • 今天的题纯粹就是考察位运算
  • 一次异或将不同位置1,然后统计1的个数
  • 待会看看评论区有无黑魔法

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public int hammingDistance(int x, int y) {
x = x ^ y;
int result = 0;
while (x != 0) {
result+=x&1;
x = x >> 1;
}
return result;
}
}

  • 果然有

Brian Kernighan 算法

  • x&(x-1)刚好可以消掉最右侧的1

1
2
3
4
5
6
7
 x = x ^ y;
int result = 0;
while (x!=0) {
x &= (x - 1);
result++;
}
return result;


← Prev P477汉明距离总和 | P1190反转每对括号间的子串 Next →