476. Number Complement

2018-04-05  本文已影响12人  衣介书生

题目分析

题目链接,登录 LeetCode 后可用
这道题目要求是求一个正整数的补数,并且假设正整数的二进制形式不以 0 开头。所有我们要做的就是找到第一个非 0 的位置,然后依次开始翻转就可以了。

代码

class Solution {
    public int findComplement(int num) {
        boolean flag = false;
        // 题目要求是 32 位整数
        for(int i = 31; i >= 0; i--) {
            // 找到第一个 1
            if((num & (1 << i)) != 0) {
                flag = true;
            }
            // 翻转该位
            if(flag) {
                num ^= (1 << i);
            }
        }
        return num;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读