LeetCode日記 9) 之漢明距離

2021-10-23 13:58:09 字數 1286 閱讀 7317

兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。

給出兩個整數 x 和 y,計算它們之間的漢明距離。(統計兩個數的二進位制表示有多少位不同即可)

注意:0 ≤ x, y < 231.

示例:輸入: x = 1, y = 4

輸出: 2

解釋:1   (0 0 0 1)

4   (0 1 0 0)

↑   ↑

上面的箭頭指出了對應二進位制位不同的位置。

二進位制的異或運算:符號是

二進位制的與運算:符號是&。運算規則:0&0=0;   0&1=0;    1&0=0;     1&1=1; 即:兩位同時為「1」,結果才為「1」,否則為0。

例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1。

例如:9&5  即 0000 1001 (9的二進位制補碼)&00000101 (5的二進位制補碼) =00000001 (1的二進位制補碼)可見9&5=1

二進位制移位運算:

其他結構和》相似

位運算技巧:

n&(n-1) 去除 n 的位級表示中最低的那一位 1。例如對於二進位制表示 01011011,減去 1 得到 01011010,這兩個數相與得到 01011010。

01011011 &

01011010

--------

01011010

思路:本題要計算兩個二進位制位數不同的個數,所以可以採用異或運算的方法,然後統計出結果有多少個1,則表示兩個數有多少個二進位制位是不同的。

為了計算等於1的位數,可以將每個位移動到最左側或最右側,然後檢查該位是否為1。更準確的說,應該進行邏輯移位,移入零替換丟棄的位。 

這裡採用右移位,每個位置都會被移動到最右邊。移位後檢查最右位的位是否為 1 即可。檢查最右位是否為 1,可以使用取模運算(i % 2)或者 and 操作(i & 1),這兩個操作都會遮蔽最右位以外的其他位。

要計算判斷最後一位是不是1,還可以使用位運算技巧的 z&(z-1) 去除 z 位級表示最低的那一位。

**1:用z&1判斷最後一位是不是1。並統計個數。

class solution 

return ch;}};

**2:用z&(z-1)每次去除最低位的1。並統計個數

class solution 

return ch;}};

**:

leetcode 刷題(python)之漢明距離

兩個整數之間的漢明距離 指的是這兩個數字對應二進位制位不同的位置的數目。給出兩個整數 x和 y,計算它們之間的漢明距離。注意 0 x,y 231.示例 輸入 x 1,y 4 輸出 2 解釋 1 0 0 0 1 4 0 1 0 0 上面的箭頭指出了對應二進位制位不同的位置。class solution...

leetcode 漢明距離

漢明距離 兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。給出兩個整數 x 和 y,計算它們之間的漢明距離。注意 0 x,y 231.示例 輸入 x 1,y 4 輸出 2 解釋 1 0 0 0 1 4 0 1 0 0 上面的箭頭指出了對應二進位制位不同的位置。如果存在於其中乙個...

LeetCode漢明距離Swift

兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。給出兩個整數 x 和 y,計算它們之間的漢明距離。注意 0 x,y 231.示例 輸入 x 1,y 4 輸出 2解釋 1 000 1 4 010 0 上面的箭頭指出了對應二進位制位不同的位置。思路一class solution n...