[更文刷题] 461. 汉明距离

118 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

一、题目描述:

461. 汉明距离

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。

给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

示例 1:

输入:x = 1, y = 4
输出:2
解释:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑
上面的箭头指出了对应二进制位不同的位置。

示例 2:

输入:x = 3, y = 1
输出:1

提示:

  • 0 <= x, y <= 2^31 - 1

二、思路分析:

考虑以下情况,x, y中只要存在有0,那么我们只需要返回不为0的那个数的二进制中1的个数即可,

如下函数 count_one(num)

如果是一般情况呢,这个时候考虑将x, y转化为二进制数

然后对不同长度的二进制数进行填充,之后遍历即可,如果不同就使

结果加1即可,总体思路很明显

异或法:

异或(^):

两个整数二进制下每一位相同的变为0,不同的为1。

任何数与0异或结果仍然为该数本身(0每一位都是0,与0异或为0,与1异或为1,所以对任意数没有影响)

例:123 ^ 0 = 123;0 ^ 1 = 1; 1 ^ 0 = 1; 0 ^ 0 = 0; 1 ^ 1= 0。

两个整数进行异或,会保留不同的每一位,如100100111 ^ 001100101 = 101000010,所得数中1的个数即为汉明距离。

三、AC 代码:

class Solution {
    public int hammingDistance(int x, int y) {
        return Integer.bitCount(x ^ y);
    }
}

四、总结:

Integer.bitCount():

Java内置函数,返回一个整数二进制中1的个数,结合异或能快速得到汉明距离。

范文参考:

【阿飞算法】位操作之汉明距离(多解法,附位操作技巧) - 汉明距离 - 力扣(LeetCode)

异或运算即可得到二进制不相同的数字,再统计这个异或结果有多少个1 - 汉明距离 - 力扣(LeetCode)