您的位置:首页 > 其它

Leetcode 461. Hamming Distance

2017-01-15 21:21 357 查看

461. Hamming Distance          

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.

给定两个整数x,y判断x和y的二进制表示中有多少位不同的

也就是判断x^y中有多少个1咯

首先当然是求x^y,我的朴素解法是考虑到了原描述中限制

所以直接强行解啦,一位一位的移动操作,移动31次,质朴的判断每一位上是不是1,然后直接累加

注意一个坑点是运算符的优先级,我不清楚+和&哪个优先级高就干脆打括号啦

class Solution
{
public:
int hammingDistance(int x, int y)
{
//work out how many 1's are there in x^y
unsigned int z=x^y;
int num=0;
for (int i=0;i<32;i++)
{
num=num+(z&1);
z=z>>1;
}
return num;
}
};

幸福的AC啦,当然我们可以看下时间发现时间是3ms,有更快的0ms的解法

于是我找到了一位大神的解法,没有强行判断每一位上是不是1,而是判断了这个数的最低一位的1在哪里

这个想法就像是树状数组里面判断lowbit一样,用一种神奇的位运算找到最低的1,然后把它处理掉

重复多次就能够找到所有的1啦,代码是直接贴的大神的代码

//this is reprinted from https://discuss.leetcode.com/topic/72236/my-c-solution-using-bit-manipulation //copyright by pengr7
class Solution {
public:
int hammingDistance(int x, int y) {
int dist = 0, n = x ^ y;
while (n) {
++dist;
n &= n - 1;
}
return dist;
}
};
这样就有0ms的解了,真是太棒了:)


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: