LeetCode偶尔一题 —— 461. 汉明距离

原题地址: https://leetcode-cn.com/probl...
repo 地址: https://github.com/pigpigever...

题目剖析🧐

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

好比说存在这样两个二进制数值:javascript

  • 001
  • 100

它们之间的汉明距离就是 2,咱们要求的就是两个二进制数值中位数不同的地方,好比你是 1 他是 0,那么汉明距离就 +1前端

前置知识📖

异或运算是相对基础的知识,可是因为在平时的开发中几乎不会用到,不免生疏。这里简单罗列下常见的异或运算:java

  • & : 按二进制位进行 与运算,相同位同时为 1 时结果为 1,不然为 0
  • | : 按二进制位进行 或运算,相同位存在 01 时结果为 1,不然为 1
  • ^ : 按二进制位进行 异或运算,相同位相同时为 0,不然为 1
  • >> : 右移运算是将一个二进制位的操做数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一概补 0
  • << : 左移运算是将一个二进制位的操做数按指定移动的位数向左移位,移出位被丢弃,右边的空位一概补 0

梳理逻辑💡

思路其实很简单,以下:git

  • 遍历两个数值,位数不相同那么 +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老师的前端补习班」并在后台留言,能够进群跟大佬们一块儿学习。
github