LeetCode #461 汉明距离

103 阅读1分钟

题目

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

示例

在这里插入图片描述

最佳代码

package com.vleus.algorithm.bit_operator;

/**
 * @author vleus
 * @date 2021年08月03日 22:35
 */
public class HammingDistance {

    //方法一:异或:调库统计1的个数
    public int hammingDistance(int x, int y) {
        return Integer.bitCount(x ^ y);
    }

    //方法二:自定义实现统计1的个数,逐位右移
    public int hammingDistance2(int x, int y) {
        int xor = x ^ y; //得到异或结果
        int count = 0; //保存当前1的个数

        //逐位右移,直到结果为0
        while (xor != 0) {
            //如果最后一位为1,count++
            if ((xor & 1) == 1) {
                count++;
            }
            xor >>=1; //右移1位
        }

        return count;
    }

    public int hammingDistance3(int x, int y) {

        int xor = x ^ y; //得到异或结果
        int count = 0; //保存当前1的个数

        //快速位移,每次寻找当前最右面的一个1,直接消去
        while (xor != 0) {
            xor = xor & xor - 1;
            count++;
        }

        return count;
    }
}