「漢明距離」Leetcode刷題|002

先來了解一下漢明距離

在信息論中,兩個等長字符串之間的漢明距離是兩個字符串對應(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ù) xy,計算它們之間的漢明距離。
注意:
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é)果


執(zhí)行結(jié)果

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


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,554評論 0 13
  • 前段時間和朋友聊到了愛情,愛情這個詞在每個人心中都對它充滿了無數(shù)幻想,但如果讓愛情變成一種“報復(fù)”的工具,愛情就...
    smileorcry閱讀 211評論 0 0

友情鏈接更多精彩內(nèi)容