The Hamming distance between two integers is the number of positions at which the corresponding bits are different.算法
Given two integers x
and y
, calculate the Hamming distance.函數
Note:
0 ≤ x
, y
< 231.學習
Example:編碼
Input: x = 1, y = 4 Output: 2 Explanation: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ The above arrows point to positions where the corresponding bits are different.
Python3spa
1 class Solution: 2 def hammingDistance(self, x, y): 3 """ 4 :type x: int 5 :type y: int 6 :rtype: int 7 """ 8 return bin(x^y).count('1') 9 10 # 0. 過程分析 11 # 1. bin(integer )內置函數,將一個整數轉化爲一個二進制字符串。 12 # 2. ^按位異或運算符:當兩對應的二進位相異時,結果爲1 13 # 3. count('1')統計'1'出現的次數 14 15 # 4. 進價 16 # 5. 位運算符的學習 17 # 6. Hamming distance的應用場景
位運算符code
運算符 | 描述 | 實例 |
---|---|---|
& | 按位與運算符:參與運算的兩個值,若是兩個相應位都爲1,則該位的結果爲1,不然爲0 | (a & b) 輸出結果 12 ,二進制解釋: 0000 1100 |
| | 按位或運算符:只要對應的二個二進位有一個爲1時,結果位就爲1。 | (a | b) 輸出結果 61 ,二進制解釋: 0011 1101 |
^ | 按位異或運算符:當兩對應的二進位相異時,結果爲1 | (a ^ b) 輸出結果 49 ,二進制解釋: 0011 0001 |
~ | 按位取反運算符:對數據的每一個二進制位取反,即把1變爲0,把0變爲1 。~x 相似於 -x-1 | (~a ) 輸出結果 -61 ,二進制解釋: 1100 0011,在一個有符號二進制數的補碼形式。 |
<< | 左移動運算符:運算數的各二進位所有左移若干位,由 << 右邊的數字指定了移動的位數,高位丟棄,低位補0。 | a << 2 輸出結果 240 ,二進制解釋: 1111 0000 |
>> | 右移動運算符:把">>"左邊的運算數的各二進位所有右移若干位,>> 右邊的數字指定了移動的位數 | a >> 2 輸出結果 15 ,二進制解釋: 0000 1111 |
Hamming distance應用場景blog
漢明距離是以理查德·衛斯里·漢明的名字命名的,漢明在偏差檢測與校訂碼的基礎性論文中首次引入這個概念。在通訊中累計定長二進制字中發生翻轉的錯誤數據位,因此它也被稱爲信號距離。漢明距離更多的用於信號處理,代表一個信號變成另外一個信號須要的最小操做(替換位),實際中就是比較兩個比特串有多少個位不同,簡潔的操做時就是兩個比特串進行異或以後包含1的個數。漢明距在圖像處理領域也有這普遍的應用,是比較二進制圖像很是有效的手段。計算一個數字的比特位包含1的個數有個小技巧:value &= value - 1這個運算的結果就是把value最後一個1去掉,循環進行運算直到value等於0(全部的1都被去掉)就能夠知道vaule擁有多少個1了。其在包括信息論、編碼理論、密碼學等領域都有應用。可是,若是要比較兩個不一樣長度的字符串,不只要進行替換,並且要進行插入與刪除的運算,在這種場合下,一般使用更加複雜的編輯距離等算法。