1. 问题描述:
给你一个正整数 num ,输出它的补数。补数是对该数的二进制表示取反。
示例 1:
输入:num = 5
输出:2
解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。
示例 2:
输入:num = 1
输出:0
解释:1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。
提示:
给定的整数 num 保证在 32 位带符号整数的范围内。
num >= 1
你可以假定二进制数不包含前导零位。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-complement
2. 思路分析:
分析题目可以知道我们模拟整个过程即可。我们可以先存储num取反之后的每一位,然后计算对应的十进制数字即可。
3. 代码如下:
class Solution:
def findComplement(self, num: int) -> int:
nums = list()
while num > 0:
nums.append(num % 2 ^ 1)
num >>= 1
res = 0
for i in range(len(nums)):
if nums[i] == 1:
res += 2 ** i
return res