算法笔记 -- 461. 汉明距离

112 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情

一、题目描述:

461. 汉明距离

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。

给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

示例 1:

输入:x = 1, y = 4
输出:2
解释:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑
上面的箭头指出了对应二进制位不同的位置。

示例 2:

输入:x = 3, y = 1
输出:1

提示:

  • 0 <= x, y <= 231 - 1

二、思路分析:

获得x,y的二进制,然后使用“0”填充将位数保持一致,然后遍历两个二进制字符并进行比较,当对应位置的值相等则将结果加一

  1. 获得x,y的二进制结果,可以使用Python自带的bin()函数进行,或者一直对2取余数进行,注意bin函数结果的前面有"Ob"两个字符,应当删除
  2. 使用"0"填充二进制较短的元素,可以在函数开始的时候,判断x,y的大小关系,并强制转换为x<y,这对结果没有影响。且可以直接对x进行填充即可。填充"0"需要生成若干个"0",使用"0"*n即可,n是需要的长度
  3. 遍历两个二进制字符并进行比较,当对应位置的值相等则将结果加一
  4. 遍历完成,返回结果

三、AC 代码:

class Solution:
    def hammingDistance(self, x: int, y: int) -> int:
        # 判断x,y的大小关系,并强制转换为x<y
        if x>y:
            x,y = y,x
        # 使用Python自带的bin()函数,删除前面有"Ob"两个字符,
        bin_x = bin(x)
        bin_y = bin(y)
        bin_x = bin_x[2:]
        bin_y = bin_y[2:]
        # 对x进行填充
        bin_x = '0'*(len(bin_y)-len(bin_x))+bin_x
        res = 0
        # 遍历两个二进制字符并进行比较,当对应位置的值相等则将结果加一
        for i in range(len(bin_y)):
            if bin_x[i]!=bin_y[i]:
                res+=1
        return res

范文参考

461. 汉明距离 (先异或 然后通过 n & (n - 1) 或 n - (n & (~n + 1))获取异或结果中的 1 的个数) - 汉明距离 - 力扣(LeetCode)