做了LeeCode一道简单题,计算汉明距离https://leetcode-cn.com/problems/hamming-distance/
想到位运算不要太简单(Python一行出答案),问题是没想到、、
补课开始
目录
一、题目介绍
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.示例:
输入: x = 1, y = 4
输出: 2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑上面的箭头指出了对应二进制位不同的位置。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/hamming-distance
二、手算思路
(只是想让花时间写的东西有点用,顺便展示一下本人劣质的代码供大佬们审阅,可跳过)
为方便理解,设两数为x,y,思路如下:
- 根据手算规则,首先对两数中较大的一个数(比如x)求其二进制位数n(getMaximumBit函数),得到最大位数number(从第0位开始)
- 从2 ^ number 次方开始,对两个数分别进行减法操作,如差值大于0则说明二进制中当前位为1,否则为0
- 对两数差值进行比较,当且仅当两数差值在0两侧时当前二进制位不相等,汉明距离 distance+1
- 重复上述步骤,直到两数的值均等于0时,循环结束
举例说明:
- x = 7,y =