最近开始刷刷LeetCode的算法,所以菜鸡本鸡准备开始通过csdn当作一个学习记录(会附上题目代码)
题目如下:
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.
示例:
输入: x = 1, y = 4; 输出: 2
此题题意很清楚,就是输出两数字对应二进制位不同的数目,很容易想到可以按位异或:将两个数转化二进制位不同为1,相同为0;
所以按位异或后的二进制结果中1的个数即是汉明距离,如何得到二进制数字中1的个数呢?
这里可以采用消除最低位1的方法,对t和t-1进行与运算,即可消除最低位的1,每消除一个即count加一,最终得到的count则是汉明距离了。
理清思路后就可以代码实现了。
如下是Java的实现代码:
class Solution {
public int hammingDistance(int x, int y) {
int t = x^y; //Java中^为按位异或
int count = 0;
while(t!=0){
t&=(t-1); //与运算
count++;
}
System.out.println(count);
return count;
}
public static void main(String[] args){
new Solution().hammingDistance(1,4);
}
}
当然,这道算法熟悉二进制运算的很轻松就能想到并解答,此外在Java中也有封装好的方法,实际计算只需直接调用就ok啦。
如有疑问,欢迎共同学习探讨