原題地址: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老師的前端補習班」並在後臺留言,可以進羣跟大佬們一起學習。