1.题目描述leetcode 461
海明距离2.1 解决方式
class Solution {
public:
int hammingDistance(int x, int y) {
int count = 0;
int re = x^y;
for (int i = 31;i>=0;i--){
if(re & (1 << i)){
count++;
}
}
return count;
}
};
其实原题目相当于计算两个数二进制进行亦或运算,在c++中可以直接通过
re = x^y;
得到与运算之后的结果;然后计算结果中1的数目就是题目要求。
计算1的数目的时候使用了
if (re & (1 << i))
括号内部的数据其实是1左移i位和re进行与运算,从而可以判断re左起第i位是否为1,若是为1,则数目加1即可。
2.1 解决方式优化
在上面方式中我们实际上无论x和y的值为多少,都运行了31次,而实际上我们只要循环re的长度次就可以。所以进行下面的优化
class Solution {
public:
int hammingDistance(int x, int y) {
int count = 0;
int re = x^y;
while(re>0){
count+= re&1; //re和1进行与运算,判断最低位是不是1;
re>>=1;//re右移一位
}
return count;
}
};
应该就是这样啦,继续加油啦。
网友评论