leetcode算法——汉明距离的计算

最近开始刷刷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啦。

如有疑问,欢迎共同学习探讨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值