Solution#1
public class Solution {
public int findComplement(int num) {
int tmp = num;
int count = 0;
while (tmp != 0) {
tmp = tmp >> 1;
count++;
}
int n = 0xFFFFFFFF >>> (32 - count);
return n & (~num);
}
}
Problem#1
1. 速度太慢
2. 求出最高位后,求n的方法不对,修改以后,快很多
Solution#2
public class Solution {
public int findComplement(int num) {
int sum = 0;
int count = 0;
while (num != 0) {
if ((num & 1) == 0) {
sum += Math.pow(2, count);
}
num >>= 1;
count++;
}
return sum;
}
}
Problem#2
1. n >> 1不能这么写
2. &运算的优先级小于==