leetcode-数字的补数(java版)

文章目录

    • 题目
    • 思路
    • 代码

题目

给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。

示例 1:

输入: 5
输出: 2
解释: 5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。
示例 2:

输入: 1
输出: 0
解释: 1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。

注意:

给定的整数保证在 32 位带符号整数的范围内。
你可以假定二进制数不包含前导零位。
本题与 1009 https://leetcode-cn.com/problems/complement-of-base-10-integer/ 相同

思路

让num的各位与1进行异或就可以了,那么怎么得到各位都是1呢,可以对1进行循环,比num大就左移一位,比如最后得到1000000,再让他减去1就可以得到0111111,这样再异或就可以了。

代码

/*
 * @lc app=leetcode.cn id=476 lang=java
 *
 * [476] 数字的补数
 */

// @lc code=start
class Solution {
    
    public int findComplement(int num) {
        long one=1;
        while(one<=num)
        {
            one=one<<1;
        }
        one-=1;
        return (int)(one^num);
    }
}
// @lc code=end


你可能感兴趣的:(leetcode刷题)