0
点赞
收藏
分享

微信扫一扫

476. Number Complement


class Solution {
public:
int findComplement(int num) {
int temp = num;
int m = 1;
while (temp != 0) {
temp /= 2;
m *= 2;
}
int ans = m - 1 - num;
return ans;
}
};

上面是自己手搓的 下面是看了网上教程学的两种方法

class Solution {
public:
int findComplement(int num) {
unsigned mask = ~0;
while (num & mask) mask <<= 1;
return ~mask & ~num;
}
};

首先~0将mask全位置为1,while语句将mask的最右端的1移至比num最高位1靠左一个位置,最后的return可将num求反后前置位的0消除(如果不懂可以随便举个例子 很简单的)

最后一个是使用filp函数求解 也是Leetcode推荐的解法

class Solution {
public:
int findComplement(int num) {
bitset<32> i(num);
int j=31;
for(;j>0;--j){
if(i[j]!=0)
break;
}
for(;j>=0;j--){
i.flip(j);
}
int r=i.to_ulong();
return r;
}
};

这个很容易懂就不解释了。。


举报

相关推荐

0 条评论