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,y判断x和y的二进制表示中有多少位不同的
也就是判断x^y中有多少个1咯
首先当然是求x^y,我的朴素解法是考虑到了原描述中限制
所以直接强行解啦,一位一位的移动操作,移动31次,质朴的判断每一位上是不是1,然后直接累加
注意一个坑点是运算符的优先级,我不清楚+和&哪个优先级高就干脆打括号啦
幸福的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的解了,真是太棒了:)
461. Hamming Distance
The
Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers
xand
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的解了,真是太棒了:)
相关文章推荐
- 【Leetcode】461. Hamming Distance
- LeetCode-461. Hamming Distance-位运算
- leetcode#461. Hamming Distance
- LeetCode 461. Hamming Distance
- Leetcode#461. Hamming Distance(异或)
- LeetCode 461. Hamming Distance
- LeetCode 461. Hamming Distance
- LeetCode: 461. Hamming Distance
- leetcode 461. Hamming Distance python实现
- 【LeetCode】461. Hamming Distance
- leetcode 461. Hamming Distance
- LeetCode#461. Hamming Distance
- leetcode_461. Hamming Distance 计算汉明距离,按位异或运算,计算整数的二进制表示中1的个数 java
- [LeetCode]461. Hamming Distance(汉明距离)
- 【LeetCode】 461. Hamming Distance
- leetcode 461. Hamming Distance
- leetcode 461. Hamming Distance
- [Leetcode] 461. Hamming Distance 解题报告
- LeetCode 461. Hamming Distance 知识点复习之位运算
- leetcode 461. Hamming Distance