目录

0476:数字的补数

力扣第 476 题

题目

对整数的二进制表示取反(0110)后,再转换为十进制表示,可以得到这个整数的补数。

  • 例如,整数 5 的二进制表示是 "101" ,取反后得到 "010" ,再转回十进制表示得到补数 2

给你一个整数 num ,输出它的补数。

示例 1:

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

示例 2:

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

提示:

  • 1 <= num < 231

注意:本题与 1009 https://leetcode-cn.com/problems/complement-of-base-10-integer/ 相同

分析

用二进制位数相同且全是 1 的数减去 num 即可。

解答

1
2
3
class Solution:
    def findComplement(self, num: int) -> int:
        return (1<<num.bit_length())-1-num

32 ms