Number Complement

题目来源
我想着每次检查一位是否为0,是的话就加上对应的值。

class Solution {
public:
    int findComplement(int num) {
        int add = 1, res = 0;
        while (num) {
            if (((num >> 1) << 1) == num)
                res += add;
            add <<= 1;
            num >>= 1;
        }
        return res;
    }
};

然后想想应该可以用异或来实现,就是先看这个数有几位,然后拿一个这么多位的全为1的数异或一下,就得到结果。但是实现起来有点问题。
巧妙的地方是设置一个全1,然后不断左移并且和num与操作,来判断num一共有多少位。

class Solution {
public:
    int findComplement(int num) {
        unsigned mask = ~0;
        while (mask & num)
            mask <<= 1;
        return ~mask ^ num;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容