LeetCode刷题

[LeetCode]461. 汉明距离

2018-11-06  本文已影响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')
上一篇 下一篇

猜你喜欢

热点阅读