
求不同的位数,很明显用异或。x和y直接异或,^的结果就是相同为0,不同为1,我们数1的个数即可。
class Solution {
public:
int hammingDistance(int x, int y) {
//^异或,不同为1;&与全1为1;|或全0为0
//x和y直接做异或,看有几位1就行
int a = x^y;
int res = 0;
while(a != 0){
a = a&(a-1);
res++;
}
return res;
}
};
两种方法
法一:判断有几位不同的,和1做&1之后得到的数就是最后一位数,比完右移
法二:也是判断有几位不同,^是不同为1,异或之后判断有几个1就行了
class Solution {
public:
int hammingDistance(int x, int y) {
//看看有几位不同的,每次用最后一位比,然后消除最后一位,最后一位比就是和1做相与操作,就可以取得最后一位的值了
// int a = 0, b = 0;
// int res = 0;
// while(x != 0 || y != 0){
// a = x&1;//&运算,全1为1,其余为0
// b = y&1;
// if(a != b) res++;
// x >>= 1;
// y >>= 1;
// }
// return res;
//法二:x和y做异或操作,异或不同为1,相同为0,得到的结果有几个1就证明有几位不同
int a = x ^ y;
int res = 0;
while(a != 0){
a &= (a-1);
res++;
}
return res;
}
};
版权声明:本文为J_avaSmallWhite原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。