题目:
汉明距离:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。(注意:0 ≤ x, y < 2^31)
示例:
输入: x = 1, y = 4 输出: 2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。
——————————————————————————————-
解法1:利用 “按位异或” + bin() 函数 + count() 函数 来处理
令 a = 0011 1100, b = 0000 1101
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把”>>”左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
class Solution(object):
def hammingDistance(self, x, y):
"""
:type x: int
:type y: int
:rtype: int
"""
# 按位异或,如果x和y对应的位上"不相同",n对应的位置就是1,否则是0
n = x ^ y
# 统计n的二进制位上“1”的个数
return bin(n).count('1')
解法2:利用 “按位异或” + 诸位比较 的方法
class Solution(object):
def hammingDistance(self, x, y):
"""
:type x: int
:type y: int
:rtype: int
"""
n = x ^ y
count = 0
while n != 0:
if n & 1 == 1:
count += 1
n = n >> 1
return count
参考:
https://www.runoob.com/python/python-operators.html
版权声明:本文为weixin_42077402原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。