【LeetCode 461】汉明距离

不念不忘少年蓝@ 2022-11-30 05:44 241阅读 0赞

题目描述

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

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

注意:
0 ≤ x, y < 231.

示例:

  1. 输入: x = 1, y = 4
  2. 输出: 2
  3. 解释:
  4. 1 (0 0 0 1)
  5. 4 (0 1 0 0)
  6. 上面的箭头指出了对应二进制位不同的位置。

解题思路

最直接的思路就是将两个数都转化为二进制数,这里使用的是toString()方法,该方法有一个可选的参数,表示转为的字符串的进制数。

转化成的二进制数如果位数不相等,在前面要用0补齐。最后比较对应的每一位即可。

该方法的时间复杂度为O(n),空间复杂度为O(n)。

还有一种的方法就是使用异或操作,两个数的异或就是不同的位数,使用正则表达式进行匹配即可。

该方法的时间复杂度为O(1),空间复杂度为O(1)。

代码实现

  1. /** * @param {number} x * @param {number} y * @return {number} */
  2. var hammingDistance = function(x, y) {
  3. let xStr = Number(x).toString(2)
  4. let yStr = Number(y).toString(2)
  5. const xLen = xStr.length
  6. const yLen = yStr.length
  7. let res = 0
  8. // 将两者的位数补齐
  9. if(xLen > yLen){
  10. yStr = Array(xLen - yLen + 1).join('0') + yStr
  11. }else if(yLen > xLen){
  12. xStr = Array(yLen - xLen + 1).join('0') + xStr
  13. }
  14. for(let i = 0; i < xStr.length; i++){
  15. if(xStr[i] !== yStr[i]){
  16. res += 1
  17. }
  18. }
  19. return res
  20. };

异或:

  1. /** * @param {number} x * @param {number} y * @return {number} */
  2. var hammingDistance = function(x, y) {
  3. return ((x ^ y).toString(2).match(/[1]/g) || []).length
  4. };

提交结果

在这里插入图片描述

异或:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode 461. 距离

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 注意: 0 ≤ x, y < 231. 利用

    相关 461. 距离

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 注意: 0 ≤ x, y < 231. 示例