“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”
一、题目描述
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 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 <= 231 - 1
二、思路分析
题目要求计算两个数字转换为二进制之后,不同的位置的 1 的个数。
由异或运算我们知道,参与运算的两个数,满足:
- 0^0 = 0
- 1^0 = 1
- 0^1 = 1
- 1^1 = 0
因此,如果两个二进制数字进行异或运算,同一对位的数字
1会变为0,不同对位的1不会受影响。那么我们只要遍历这两个二进制数字每一位上的元素,遇到1就将答案+1即可。
现在有两个问题,①如何将两个整数转换为二进制数;②如何遍历二进制数上的每一位元素。
- ①
^运算符会将参与运算的数字转换为二进制数,运算完毕之后将结果转换为十进制。 - ②使用
>>,每次将二进制数右移一位(相当于/,例如a >>= 1等价于a /= 2),直到为0为止。【>>运算符同样会将数字转换为二进制数再进行运算,然后将运算后的结果转换回来】。
三、AC 代码
/**
* @param {number} x
* @param {number} y
* @return {number}
*/
var hammingDistance = function(x, y) {
let s = x ^ y;
let res = 0;
while (s) {
res += s & 1;
s >>= 1;
}
return res;
};