本题中的原本含义为求两个数之间的汉明距离
汉明距离:
两个数之间相同位但是不同的个数的数量具体百度
2.问题:
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
Note:
0 ≤ x, y < 231.
Example:
Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
The above arrows point to positions where the corresponding bits are different.
3.解答:
class Solution {
public int hammingDistance(int x, int y) {
int s = x^y;
int count = 0;
while(s != 0){
if((s & 1) == 0){
count++;
}
s = s >> 1;
}
return count;
}
}
题目本身很简单,抽象出来具体就是求出一个二进制数字里面1的个数:
while(s != 0){
if((s & 1) == 1){
count++;
}
s = s >> 1;
}
在本题里面的解答中,将二进制数字进行右移然后判断最低位是否为1即可,但是这只限定于正数,如果为负数在右移的时候最高位需要补1,因此会先入死循环,无限的补1
可以考虑将1进行左移
int flag = 1;
while(flag != 0){
if((s & flag) != 0){
count++;
}
flag = flag << 1;
}
算法还有优化的具体地方,flag变为0需要int溢出