本题比较简单,从左到右找到第一个1,也即确定mask。
若n&mask == 1 则n=n-mask
若n&mask ==0 则 n= n+mask;
代码如下
class Solution {
public:
int findComplement(int num) {
int mask=pow(2,30);
cout<<mask<<endl;
while((num&mask)==0)
mask>>=1;
cout<<mask<<endl; //从左到右找到第一个1
while(mask!=0)
{
if((num&mask)!=0)
num=num-mask;
else
num=num+mask;
mask>>=1;
}
return num;
}
};