算法练习——汉明距离 leetcode.461 python

这篇博客介绍了两种计算两个整数之间汉明距离的方法。第一种是将数字转换为等长二进制位并逐位比较,第二种是利用位运算,通过异或和按位与操作来统计不同位的数量。位运算是高效解决此类问题的关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

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

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

解法一:关键在于将x、y转化为等长二进制位

class Solution:
    def hammingDistance(self,x,y):
        cnt = 0
        temp = 0
        # [2:]的目的是去掉0b,[::-1]的目的是逆置数组,使得低位重合
        x = list(bin(x))[2:][::-1]
        y = list(bin(y))[2:][::-1]
        len_X = len(x)
        len_Y = len(y)
        sub = abs(len_X-len_Y)
        #  高位补零 方便比较
        if len_X < len_Y:
            while temp < sub:
                x.append('0')
                temp = temp + 1
        else:
            while temp < sub:
                y.append('0')
                temp = temp + 1
        i = 0
        while i < len(x):
            if x[i] != y[i]:
                cnt = cnt+1
            i = i + 1
        return cnt

解法二:位运算

统计两数不同的位:两数异或

统计一个数之中的“1”的个数:等于 x & (x-1) 直到0的次数

class Solution:
    def hammingDistance(self,x,y):
        ret = x ^ y
        cnt = 0
        while ret:
            ret = ret & (ret - 1)
            cnt += 1
        return cnt

熟练使用位运算,可以使得代码简洁明了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值