两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x
和 y
,计算它们之间的汉明距离。
注意:
0 ≤ x
, y
< 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