您的位置:首页 > 其它

【LeetCode】461. Hamming Distance

2018-02-12 18:20 405 查看


题目是要求二进制数字之间的不同位共有几位,也就是说求x,y异或运算后,有几个1的问题(这里应当灵活应用逻辑运算与异或等,这些运算本身就是基于二进制计算的,不需要十进制转二进制那么麻烦)
然后就是统计几个1的问题,记录就好,没有转换为二进制的必要。s1是比较笨的一种方法,但是思路简单更好理解些。
s2理解后,其实更简单。主要是用到了一个与操作,n &= n-1;每一次与操作,原数值中的1就减少一个,可以写几个数字演算一下,然后在n != 0的情况下,可以与几次,就证明有几个1
s1#include <iostream>
using namespace std;

class Solution {
public:
int hammingDistance(int x, int y) {
int mid;
x ^= y;
int i = 0;
mid = x;
while(mid > 2){
x = mid;
mid = x / 2;
if(x % 2) ++i;
}
if(mid != 0)
++i;
return i;
}
};
int main() {
Solution s;
cout << s.hammingDistance(73,63) << endl;
system("pause");
return 0;
}s2class Solution {
public:
int hammingDistance(int x, int y) {
int d = 0;
int n;
n = x ^ y;
while(n){
++d;
n &= n-1;
}
return d;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: