461. 漢明距離(Python)

題目

難度:★☆☆☆☆
類型:數(shù)學(xué)

兩個(gè)整數(shù)之間的漢明距離指的是這兩個(gè)數(shù)字對(duì)應(yīng)二進(jìn)制位不同的位置的數(shù)目。

給出兩個(gè)整數(shù) x 和 y,計(jì)算它們之間的漢明距離。

注意:
0 ≤ x, y < 231.

示例

輸入: x = 1, y = 4

輸出: 2

解釋:

1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑

上面的箭頭指出了對(duì)應(yīng)二進(jìn)制位不同的位置。

解答

方案1:計(jì)數(shù)

這道題很簡單,最簡單的思路是將兩個(gè)字符轉(zhuǎn)為二進(jìn)制數(shù),然后一一比較各位,統(tǒng)計(jì)不相等的個(gè)數(shù)。

class Solution:
    def hammingDistance(self, x: int, y: int) -> int:
        def dec2bin(x):
            """
            將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),以從低到高位的列表形式
            例如輸入:6,輸出:[0, 1, 1]
            :param x: 輸入十進(jìn)制數(shù)
            :return: 逆序二進(jìn)制各位列表
            """
            res = []
            while x:
                r, x = x % 2, x // 2
                res.append(r)
            return res

        def hamming(a: list, b: list):
            """
            計(jì)算兩個(gè)二進(jìn)制數(shù)的漢明距離
            :param a: 輸入兩個(gè)二進(jìn)制各位逆序列表
            :param b: 
            :return: 
            """
            count = 0                                   # 初始化計(jì)數(shù)器
            for i in range(max(len(a), len(b))):
                a_bit = a[i] if i < len(a) else 0       # 提取a列表當(dāng)前位
                b_bit = b[i] if i < len(b) else 0       # 提取b列表當(dāng)前位
                count = count if a_bit == b_bit else count + 1  # 如果提取出的兩個(gè)數(shù)字不相等,計(jì)數(shù)器+1
            return count

        return hamming(dec2bin(x), dec2bin(y))

方案2:異或

漢明距離的本質(zhì)是兩個(gè)數(shù)異或后字符"1"的個(gè)數(shù),可以直接使用異或?qū)崿F(xiàn)。

兩數(shù)異或后相同的位計(jì)算結(jié)果為零,不同的位計(jì)算結(jié)果為一。

class Solution:
    def hammingDistance(self, x: int, y: int) -> int:
        return bin(x^y).count('1')

如有疑問或建議,歡迎評(píng)論區(qū)留言~

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

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

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