持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情
一、题目描述:
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 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的个数,结合异或能快速得到汉明距离。