自己想的解题思路是先做XOR操作得到不同位的序列,然后统计其中1的个数。具体统计方法为,和1相与得到只保留了最后一位的中间结果,判断最后一位是否为1,若为1则说明有一个1,然后右移重复操作即可
class Solution {
public:
int hammingDistance(int x, int y) {
int v_xor = x ^ y;
int c = 0;
int r = 0;
cout << v_xor << endl;
while(v_xor != 0){
r = v_xor & 1;
if(r != 0){
c++;
}
v_xor /= 2;
}
return c;
}
};
网上看到使用n & (n-1)可以直接去掉最右边的1,看起来方便很多,结果submit都是3ms,没变快orz。具体代码变为
class Solution {
public:
int hammingDistance(int x, int y) {
int v_xor = x ^ y;
int c = 0;
int r = 0;
cout << v_xor << endl;
while(v_xor != 0){
v_xor =v_xor &( v_xor-1);
c++;
}
return c;
}
};