您的位置:首页 > 其它

LeetCode 461: Hamming Distance

2017-07-12 21:07 295 查看
LeetCode 461: Hamming Distance

题目大意

求两个整型数x,y的汉明距离。

Description

The Hamming distance between two integers is the number of positions at which the corresponding bits are different.

Given two integers x and y, calculate the Hamming distance.

Note:
0 ≤ x, y < 231.


Example

Input: x = 1, y = 4

Output: 2

Explanation:
1   (0 0 0 1)
4   (0 1 0 0)
?   ?

The above arrows point to positions where the corresponding bits are different.


给定代码

int hammingDistance(int x, int y) {

}


思路分析&相应代码

我的初级版

根据上面的例子可知,我们需要判断两个数值二进制为有多少位不同,所以可以直接根据十进制向二进制的转换过程而获得结果。需要注意的是必须两个数都为0时才能判断停止。

int hammingDistance(int x, int y) {
int count = 0;
while(x!=0 || y!=0){
if(x%2 != y%2){
count++;
}
x/=2; y/=2;
}
return count;
}


Solution中的升级版

思路:先将两个数进行按位异或,然后判断异或获得的结果中有几个1。

int hammingDistance(int x, int y) {
int dist = 0, n = x ^ y;
while (n) {
++dist;
n &= n - 1;
}
return dist;
}


分析总结

难得首次提交就AC,虽然自己调试的时候还是有错误。Solution中还有大神只用了一行代码,也是666。私以为,我的方法是最笨的,当然也是我这种菜鸟最容易想到的,上面那种方法对于我来说的问题在于,对于位运算不够熟悉,所有完全想不到还可以那样来按位异或甚至获得二进制中1的个数,当时学C++的时候学的比较粗略,之后也没怎么练习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: