LeetCode 461.汉明距离

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

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

注意:
0 ≤ xy < 231.


我一直都觉得我自己写python一股c味儿############################################

import math
class Solution:
    def hammingDistance(self, x, y):
        n_x=abs(x)
        n_y=abs(y)
        count=0
        if n_x==n_y==0:
            return 0
        for i in range(int(math.log(max(n_x,n_y),2))+1):
            if (int(n_x)%2) != (int(n_y)%2):
                count=count+1
            n_x=n_x/2
            n_y=n_y/2
        return count

以前是网上的写法

Python解法2(运用了一些表达式)

def hammingDistance(x, y):
    # 将x与y自动转化成二进制,然后取亦或(对二进制而言,相同的变为0,不同的变为1)
    xor = x ^ y
    count = 0
    for _ in range(32):  # 这里循环32次,以为题目条件输入的数字是小于2^31
        count += xor & 1 # &表示将两个数转化为2进制,按较短位数截取比较,相同取1不同取0,然后得到的数字再转化为10进制显示。
        xor = xor >> 1   # >>表示带符号移位,代码表示向右移一位(二进制移位运算就相当于除以二取整)
    return count

Python解法3(一行代码)

def hammingDistance(x, y):
    # ^取了亦或后,转化为2进制数,相同为0,不同为1。然后算1的个数,其实就相当于找不同的个数。
    return bin(x ^ y).count('1')
  • 1
  • 2
  • 3

耗时:48ms



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值