LeetCode偶爾一題 —— 461. 漢明距離

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

題目剖析🧐

兩個整數之間的漢明距離指的是這兩個數字對應二進制位不同的位置的數目。給出兩個整數 x 和 y,計算它們之間的漢明距離。

比如說存在這樣兩個二進制數值:

  • 001
  • 100

它們之間的漢明距離就是 2,我們要求的就是兩個二進制數值中位數不一樣的地方,比如你是 1 他是 0,那麼漢明距離就 +1

前置知識📖

異或運算是相對基礎的知識,但是由於在平時的開發中幾乎不會用到,難免生疏。這裏簡單羅列下常見的異或運算:

  • & : 按二進制位進行 與運算,相同位同時爲 1 時結果爲 1,否則爲 0
  • | : 按二進制位進行 或運算,相同位存在 01 時結果爲 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老師的前端補習班」並在後臺留言,可以進羣跟大佬們一起學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章