Skip to content

Latest commit

 

History

History
90 lines (58 loc) · 2.15 KB

File metadata and controls

90 lines (58 loc) · 2.15 KB

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. Complement of Base 10 Integer 相同

思路分析

先求出每个比特位的值,然后按位取反,再用 二进制转十进制的算法转换回去即可。

看题解有更牛逼的思路,比如:

输入为 5 是 101

输出为 2 是 010

上下两个加起来就是 111 即2的3次方-1

输入为 8 是 1000

输出为 7 是 0111

上下两个加起来就是 1111 即2的4次方-1

同理

就可以知道

找到一个比num大的 2的n次幂的数 本题为 a

然后结果就是 a - num - 1

一刷
link:{sourcedir}/_0476_NumberComplement.java[role=include]