题目要求:
分析:
异或之后,不同的地方都会变成1,所以只需要求1的个数就好了。
具体代码如下:
class Solution {
public int hammingDistance(int x, int y) {
int temp = x ^ y;
int count = 0;
String s = Integer.toBinaryString(temp);
for(int i = 0; i < s.length(); i ++) {
if(s.charAt(i) == '1')
count ++;
}
return count;
}
}
这个代码性能不好,我看了一下大神的写法,最后找1的个数的时候,是用temp & (temp - 1)
来做的,理由是每次temp & (temp - 1)
都会把最右边的1变成0,直到它全部变为0时,计数也就结束了。这个做法真是太完美了。那么代码就可以变为:
class Solution {
public int hammingDistance(int x, int y) {
int temp = x ^ y;
int count = 0;
while(temp != 0) {
temp = temp & (temp - 1);
count ++;
}
return count;
}
}
这样代码的性能就会好很多。