携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情
一、题目描述:
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 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”填充将位数保持一致,然后遍历两个二进制字符并进行比较,当对应位置的值相等则将结果加一
- 获得x,y的二进制结果,可以使用Python自带的bin()函数进行,或者一直对2取余数进行,注意bin函数结果的前面有"Ob"两个字符,应当删除
- 使用"0"填充二进制较短的元素,可以在函数开始的时候,判断x,y的大小关系,并强制转换为x<y,这对结果没有影响。且可以直接对x进行填充即可。填充"0"需要生成若干个"0",使用"0"*n即可,n是需要的长度
- 遍历两个二进制字符并进行比较,当对应位置的值相等则将结果加一
- 遍历完成,返回结果
三、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)