原题地址:https://leetcode-cn.com/probl...repo
地址: https://github.com/pigpigever...
题目剖析?
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。
比如说存在这样两个二进制数值:
001
100
它们之间的汉明距离就是 2
,我们要求的就是两个二进制数值中位数不一样的地方,比如你是 1
他是 0
,那么汉明距离就 +1
。
前置知识?
异或运算是相对基础的知识,但是由于在平时的开发中几乎不会用到,难免生疏。这里简单罗列下常见的异或运算:
-
&
: 按二进制位进行与运算
,相同位同时为1
时结果为1
,否则为0
-
|
: 按二进制位进行或运算
,相同位存在0
和1
时结果为1
,否则为1
-
^
: 按二进制位进行异或运算
,相同位相同时为0
,否则为1
-
>>
: 右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0
-
<<
: 左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0
梳理逻辑?
思路其实很简单,如下:
- 遍历两个数值,位数不相同那么
+1
示例代码?
/**
* @param {number} x
* @param {number} y
* @return {number}
*/
var hammingDistance = function(x, y) {
let ans = 0
while (x !== 0 || y !== 0) {
if ((x & 1) !== (y & 1)) {
ans++
}
x >>= 1
y >>= 1
}
return ans
};
写在最后
一直在 LeetCode 上刷题,之前还加入了组织,有兴趣加入一起学习的同学可以在下方留言或者关注我的微信公众号「tony老师的前端补习班」并在后台留言,可以进群跟大佬们一起学习。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。