两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x
和 y
,计算它们之间的汉明距离。
注意:
0 ≤ x
, y
< 231.
示例:
输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。
第一版代码: 就是直接求整数的二进制表达式, 又因为前两位是"0b", 从第三位开始截取有用的信息.又因为如果两个数差别的比较大可能显示的位数不同, 而进行了补充, 其实这是多余的, 并没有必要这样做
虽然是通过了, 但是效果很差需要改善
第二版代码: 第一版代码就是严格按照题意的表达来计算的, 其实有直接求异或的操作就直接求到了结果, 然后的工作就是求这个结果数据的二进制有多少个1了
虽然没有质的提升, 但是我们需要掌握这种求一个数的二进制有多少个1 的方法, 为什么这样就可以求xor有多少个1 呢?
如果xor不为0, 那么他的二进制中肯定有至少一个1 的, 我们让res += 1 然后就是我们怎么消去了其中的一个1, 我们这里消去的就是最后的一个1 .仔细想想我们将xor- 1 就是讲最后一个1 变成了0, 然后将这个1 后面的都变成了1, 这样把这两个数求与操作就将这个1 化为了0
第三版代码: 另外一种求解二进制中多少个1 的方法
和上面的效果几乎是一样的, 这里的原理是: 每次只看最后一位是不是1 , 如果是那就res += 1 然后右移一位, 直到全部为0
第四版代码: 其实求到了xor就可以直接转换成str进行统计了
虽然时间上提升了很多, 而且好多大佬也是这么做的, 时间最短的大佬也是这么写的, 但是我认为使用到了count()这个内置的函数, 并不是很好, 还是自己写比较好
第五版代码
和前面的效果相当, 果然没有内置的效率高, 但是方法大致就这几种吧!