美文网首页LeetCode刷题
[LeetCode]461. 汉明距离

[LeetCode]461. 汉明距离

作者: 杏仁小核桃 | 来源:发表于2018-11-06 15:30 被阅读5次

    461. 汉明距离
    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
    给出两个整数 xy,计算它们之间的汉明距离。
    注意:
    0 ≤ x, y < 231.
    示例:
    输入: x = 1, y = 2
    输出: 2

    解法1

    将x, y的二进制转成字符串逐一比对.

    class Solution:
        def hammingDistance(self, x, y):
            str_x = str(bin(x))[2:]
            str_y = str(bin(y))[2:]
            i = 1
            distance = 0
            while i <= len(str_x) and i <= len(str_y):
                if str_x[-i] != str_y[-i]:
                    distance += 1
                i += 1       
            remain = max(len(str_x)-i+1,len(str_y)-i+1,0)
            long_s = ""
            if len(str_x) > len(str_y):
                long_s = str_x
            else:
                long_s = str_y
            for i in range(remain):
                if long_s[i] == "1":
                    distance += 1
            return distance
    

    解法2

    用字符串的zfill()函数补充高位, 简化比较流程.

    class Solution:
        def hammingDistance(self, x, y):
            str_x = str(bin(x))[2:]
            str_y = str(bin(y))[2:]
            str1 = str_x.zfill(32)
            str2 = str_y.zfill(32)
            distance = 0
            for i in range(32):
                if str1[i] != str2[i]:
                    distance += 1
            return distance
    

    解法3

    用异或运算的特性, 相同位为0, 不同位为1, 只要算出异或结果的1的个数就行了.

    class Solution:
        def hammingDistance(self, x, y):
            xor = list(bin(x^y))
            return xor.count('1')
    

    相关文章

      网友评论

        本文标题:[LeetCode]461. 汉明距离

        本文链接:https://www.haomeiwen.com/subject/yjsuxqtx.html