题目描述

image.png

解题思路

本题思路就是求两个2进制数1的不同个数,可以先进行相与,再统计1的个数。
此时统计1的个数也就可以使用上一题比特位计数的方法。

  1. // Brian Kernighan 算法
  2. public int hammingDistance(int x, int y) {
  3. x ^= y;
  4. int count = 0;
  5. while (x != 0) {
  6. x &= (x - 1);
  7. count++;
  8. }
  9. return count;
  10. }

移位

  1. // 移位统计1
  2. public int hammingDistance(int x, int y) {
  3. x ^= y;
  4. int count = 0;
  5. while (x != 0) {
  6. if ((x & 1) == 1) count++;
  7. x >>= 1;
  8. }
  9. return count;
  10. }