作为leetcode入门的第一题,461,做如下总结,对于异或和二进制一直用的很不熟悉,学的也非常不扎实,所以做题时并不轻松。
计算机世界是二进制世界,所以所有数字都是以二进制储存的,不需要额外转换。
X^Y的意义是当x和y都化成二进制数时,将其每一位一一对应,相同为1,不同为0.其结果是对应后的二进制数的十进制形式。
而二进制数字缩位的方法是将其十进制形式除以2.(当其是2的倍数时,如不是需要减1)
将问题转换为求一个二进制数有多少个1时,问题会变得简单一些。即十进制数与2mod,如果余数为1,说明最后一位为1,计算器进行+1运算,然后将其-1,除以2,进行缩位运算。
```
public class Solution {
public int hammingDistance(int x, int y) {
int res =x^y;
int cnt=0;
for(int i=0;i<31;i++){
if(res%2==1){
cnt=cnt+1;
res=(res-1)/2;
}
else{
res=res/2;
}
}
return cnt;
}
}
```
希望继续坚持,加油~
网友评论