这是悦乐书的第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. JVM系列第12讲:JVM参数之查看JVM参数

    今天要说的是如何查看 JVM 中已经设置的参数,包括显示参数和隐式参数. 打印显式参数 -XX:+PrintVMOptions 该参数表示程序运行时,打印虚拟机接受到的命令行显式参数.我们用下面的命令 ...

  2. ubuntu 下安装docker 踩坑记录

    ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...

  3. vue + hbuilder 开发备忘录

    踩过的坑: axios 安卓低版本兼容性处理 阻止表单中,button默认事件,出现刷新问题. 设置滚动条的位置 vue 数据和对象数据变化 dom结构不变 android低版本 白屏问题 你是不是用 ...

  4. Zabbix通过IPMI监控HPE服务器硬件

    IPMI是智能型平台管理接口(Intelligent Platform Management Interface)的缩写,是管理基于 Intel结构的企业系统中所使用的外围设备采用的一种工业标准,该标 ...

  5. 『字符串模式匹配 KMP』

    字符串模式匹配 我们要先了解一下问题是什么. 模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配. KMP 然后我们来认识一下今天的主 ...

  6. 总结Unity 初学者容易犯的编译与运行时错误

    总结Unity 初学者容易犯的编译与运行时错误 1: Untiy 出现编译错误: NewLine In Constant  解决方法:    方法一:如果报错脚本比较少量的话,可能用记事本打开报错的脚 ...

  7. 附实例!图解React的生命周期及执行顺序

    本文由云+社区发表 作者:前端林子 1.七个可选的生命周期 可以结合下图来看: (1) componentWillMount() 仅在render()方法前被调用一次,如果在该方法中调用了setSta ...

  8. 杭电ACM2015--偶数求和

    偶数求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. (摘)使用 .NET Core 实现依赖关系注入

    为什么使用依赖关系注入? 使用 .NET,通过 new 运算符(即,new MyService 或任何想要实例化的对象类型)调用构造函数即可轻松实现对象实例化.遗憾的是,此类调用会强制实施客户端(或应 ...

  10. C# string数组转int数组(转载)

    C# string数组转int数组   用法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //字符串数组(源数组) string[] sNums = new[] {"1 ...