这是悦乐书的第237次更新,第250篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第104题(顺位题号是461)。两个整数之间的汉明距离是相应位不同的位置数。给定两个整数x和y,计算汉明距离。

注意:0≤x,y <2^31。

例如:

输入:x = 1,y = 4

输出:2

说明:

1(0 0 0 1)

4(0 1 0 0)

         ↑    ↑

上述箭头指向相应位不同的位置。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

因为x和y都是正数,所以不用考虑反码、补码的事情,所以可以使用字符串操作。如果转成二进制字符串后,两字符串的长度不相等,所以要先把短的字符串前面补齐0,然后再使用循环,依次判断两字符串的字符,如果字符不同就记数加1,最后返回。

public int hammingDistance(int x, int y) {
String str = Integer.toBinaryString(x);
String str2 = Integer.toBinaryString(y);
int count = 0;
if (str.length() != str2.length()) {
if (str.length() < str2.length()) {
while (str.length() != str2.length()) {
str = "0" + str;
}
} else {
while (str.length() != str2.length()) {
str2 = "0" + str2;
}
}
}
for (int i=0; i<str.length(); i++) {
if (str.charAt(i) != str2.charAt(i)) {
count++;
}
}
return count;
}

03 第二种解法

从题目的例子中,我们看出1和4所表示的二进制数在做异或运算后是5,转成二进制数就是101,也就是说,其中两个1就是1和4不同的位,所以我们可以借助异或运算。

异或(^)运算的规则是两边的对应位不同时就取1,使用异或计算得到对应的整数后,我们需要计算其中1位的个数,这就和之前有道题类似了,可以借鉴那边的解法。

public int hammingDistance2(int x, int y) {
int result = x^y;
String str = Integer.toBinaryString(result);
int count = 0;
for (int i=0; i<str.length(); i++) {
if (str.charAt(i) == 49) {
count++;
}
}
return count;
}

04 第三种解法

同样是借助异或运算,在计算二进制数1位的个数时,使用的是与运算,具体的思路可以参照之前的一篇。

public int hammingDistance3(int x, int y) {
int result = x^y;
int count = 0;
while (result != 0) {
count++;
result = result & (result - 1);
}
return count;
}

05 第四种解法

直接使用异或运算,然后借助包装类Integer的bitCount方法,返回二进制数中1位的个数。

public int hammingDistance4(int x, int y) {
return Integer.bitCount(x^y);
}

06 小结

算法专题目前已日更超过三个月,算法题文章104+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

相关题目:

https://www.cnblogs.com/xiaochuan94/p/10036146.html

LeetCode算法题-Hamming Distance(Java实现)的更多相关文章

  1. LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)

    这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...

  2. LeetCode算法题-Maximize Distance to Closest Person(Java实现)

    这是悦乐书的第328次更新,第351篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第198题(顺位题号是849).在一排座位中,1表示一个人坐在该座位上,0表示座位是空的 ...

  3. LeetCode算法题-Shortest Distance to a Character(Java实现)

    这是悦乐书的第321次更新,第343篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第191题(顺位题号是821).给定字符串S和字符C,返回一个整数数组,表示字符串中所有 ...

  4. LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  5. LeetCode算法题-Sqrt(Java实现)

    这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...

  6. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  7. LeetCode算法题-Number of Lines To Write String(Java实现)

    这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...

  8. LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  9. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

随机推荐

  1. Elasticsearch索引原理

    转载 http://blog.csdn.net/endlu/article/details/51720299 最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计 ...

  2. 从锅炉工到AI专家(10)

    RNN循环神经网络(Recurrent Neural Network) 如同word2vec中提到的,很多数据的原型,前后之间是存在关联性的.关联性的打破必然造成关键指征的丢失,从而在后续的训练和预测 ...

  3. 当面试官说 “你还有什么问题想问的” ,你该如何回答?

    阅读本文大概需要 4 分钟. 作者:黄小斜 来源:程序员江湖 程序员面试时经常会听到面试官说一些套话,比如"今天的面试就到这里了,回去等通知吧","你还有什么问题想问我的 ...

  4. Kafka Producer源码简述

    接着上文kafka的简述,这一章我们一探kafka生产者是如何发送消息到消息服务器的. 代码的入口还是从 kafkaTemplate.send开始 最终我们就会到 org.springframewor ...

  5. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

  6. PE知识复习之PE的重定位表

    PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思.  如一个地址位 0x401234 ,Imagebase = 0x400000 . 那么RVA就是 1234.  如果Im ...

  7. 如何优雅地查看 JS 错误堆栈?

    本文由云+社区发表 在前端,我们经常会通过 window.onerror 事件来捕获未处理的异常.假设捕获了一个异常,上报的堆栈是这个: TypeError: Cannot read property ...

  8. oracle数据库密码过期修改注意事项

    近期的工作中,因数据库密码临近过期,需要进行修改,因对oracle数据库底层结构不了解,导致安装网上的教程操作是出现一些问题,特记录下来 传统的修改语句为 输入:win+R进入cmd  输入sqlpl ...

  9. 改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员(整理中)

    改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员 序 为什么我们的程序运行得棒棒的,还要改呢?Why? 答:我们要让程序运行得更快,执行的效率更高,代码的可读性更强,维护的成本更低.. ...

  10. JSON字符串反序列化成对象_部分属性值反序列化失败

    简介:本人在开发webapi接口时遇到了:一个复杂的Json字符串在反序列化为对象时报,无法发序列化其中的一个属性对象? 使用方法: InternalRecommendRequestFormModel ...