标签:distance res 有一个 gdi 没有 pre bit int ++
思路:
将x和y不断移位和1相与进行判断是否相等,不等加一即可
class Solution {
public:
int hammingDistance(int x, int y) {
int MAX_BIT=30;
int res=0;
for(int i=0;i<=MAX_BIT;++i){
if(((x>>i)&1)!=((y>>i)&1)) res++;
}
return res;
}
};
先把x和y异或,让不相同的位置1.
我们知道一个数n与n-1相与,当n最低位没有1时,我们就会向高位借位,那么我们就能消除一个1。当n最低位有一个1时就能消去,那么不断进行就能将n的1消除。所以我们while进行循环,当n=0时,我们就计算完成了汉明距离。每次循环都算在消除一个1,所以循环一次计数一次。
class Solution {
public:
int hammingDistance(int x, int y) {
int now = x^y;
int res=0;
while(now){
now = now&(now-1);
res++;
}
return res;
}
};
标签:distance res 有一个 gdi 没有 pre bit int ++
原文地址:https://www.cnblogs.com/Mrsdwang/p/14837222.html