前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 461. 汉明距离

LeetCode 461. 汉明距离

作者头像
村雨遥
发布2020-04-26 17:51:24
3990
发布2020-04-26 17:51:24
举报
文章被收录于专栏:JavaParkJavaPark

题目

461. 汉明距离[1]

描述

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

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

注意: 0 ≤ x, y < 231.

示例:

输入: x = 1, y = 4

输出: 2

解释:1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑

上面的箭头指出了对应二进制位不同的位置。

解题思路

  1. x, y 转换为二进制字符串;
  2. 对两个字符串较长的前 两字符串长度差 位进行遍历,若不为 0 则说明不同, 距离加 1
  3. 对两字符串比较相同位数上不同的字符,一旦不同,距离加 1
  4. 返回最终距离即为汉明距离;

实现

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 * Version : 1.0
 * Author  : 村雨遥
 * Email   : cunyu1024@foxmail.com
 * Website : https://cunyu1943.github.io
 * 公众号   : 村雨遥
 * Date    : 2020/4/11 15:35
 * Project : LeetCode
 * Package : PACKAGE_NAME
 * Class   : FourSixOne
 * Desc    : 461. 汉明距离
 */
public class FourSixOne {
 public static void main(String[] args) throws Exception {
  FourSixOne fourSixOne = new FourSixOne();
  int x = 5;
  int y = 19;
//  3
  System.out.println(fourSixOne.hammingDistance(x, y));
 }

 /**
  * 汉明距离
  *
  * @param x
  * @param y
  * @return 汉明距离
  */
 public int hammingDistance(int x, int y) {
  int distance = 0;
  int diff = 0;

//  转换为二进制字符串
  String strX = Integer.toBinaryString(x);
  String strY = Integer.toBinaryString(y);

  int disBetween = Math.abs(strX.length() - strY.length());
//  比较,将长度较长的字符串的不同字符数找出
  for (int i = 0; i &lt; disBetween; i++) {
   if (strX.length() &lt; strY.length()) {
    if (strY.charAt(i) != &#39;0&#39;) {
     diff++;
    }
   } else {
    if (strX.charAt(i) != &#39;0&#39;) {
     diff++;
    }
   }

  }

//  通过比较两个二进制字符串,找出不同的位数
  if (strX.length() &lt; strY.length()) {

   for (int j = 0; j &lt; strX.length(); j++) {
    if (strX.charAt(j) != strY.charAt(j + disBetween)) {
     distance++;
    }
   }
  } else {
   for (int k = 0; k &lt; strY.length(); k++) {
    if (strY.charAt(k) != strX.charAt(k + disBetween)) {
     distance++;
    }
   }
  }

//  返回汉明距离
  return distance + diff;
 }
}

参考资料

[1]

461. 汉明距离: https://leetcode-cn.com/problems/hamming-distance/

[2]

汉明距离: https://baike.baidu.com/item/%E6%B1%89%E6%98%8E%E8%B7%9D%E7%A6%BB

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 村雨遥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 描述
  • 解题思路
  • 实现
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档