先來了解一下漢明距離
在信息論中,兩個等長字符串之間的漢明距離是兩個字符串對應(yīng)位置的不同字符的個數(shù)。換句話說,它就是將一個字符串變換成另外一個字符串所需要替換的字符個數(shù)。例如:
1011101 與 1001001 之間的漢明距離是 2。
2143896 與 2233796 之間的漢明距離是 3。
"toned" 與 "roses" 之間的漢明距離是 3。
應(yīng)用
漢明距離更多的用于信號處理,表明一個信號變成另一個信號需要的最小操作(替換位),實際中就是比較兩個比特串有多少個位不一樣,簡潔的操作時就是兩個比特串進行異或之后包含1的個數(shù)。漢明距在圖像處理領(lǐng)>域也有這廣泛的應(yīng)用,是比較二進制圖像非常有效的手段。
科普完之后來看看Leecode上的題目:
兩個整數(shù)之間的漢明距離指的是這兩個數(shù)字對應(yīng)二進制位不同的位置的數(shù)目。
給出兩個整數(shù)x和y,計算它們之間的漢明距離。
注意:
0 ≤x,y< 231.
示例:
輸入: x = 1, y = 4
輸出: 2
解釋:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭頭指出了對應(yīng)二進制位不同的位置。
解答
這個問題首先要把十進制轉(zhuǎn)換成二進制,在Python中有函數(shù) bin()來解決,之后確定兩個二進制之間相對位置有沒有異同,這里用到了位操作
python的位操作:
| 描述符 | 描述 |
|---|---|
| & | 與操作 |
| 1 | 或操作 |
| ^ | 異或操作 |
| >> | 左移位 |
| << | 右移位 |
這里要用到異或操作,用「0」也是可以計數(shù)的。代碼如下:
class Solution(object):
def hammingDistance(self, x, y):
"""
:type x: int
:type y: int
:rtype: int
"""
return bin((x^y)).count('1')
本來想著用兩層for循環(huán)來做,沒有寫出來,換一種思路,沒想到一句就解決了。
看一下執(zhí)行結(jié)果

還可以,看一下排名靠前的大佬代碼也是這樣,可能是我太菜了吧,繼續(xù)努力。