题目描述:
给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。
注意:
- 给定的整数保证在32位带符号整数的范围内。
- 你可以假定二进制数不包含前导零位。
示例 1:
输入: 5 输出: 2 解释: 5的二进制表示为101(没有前导零位),其补数为010。所以你需要输出2。
示例 2:
输入: 1 输出: 0 解释: 1的二进制表示为1(没有前导零位),其补数为0。所以你需要输出0。
解题思路:
- 先得到给定数字的二进制形式
- 从后往前(从低位到高位)遍历二进制字符串
- 由于要取反,因此遇到0则加上这一位相应的权,遇到1 则不变
代码实现:
class Solution:
def findComplement(self, num: int) -> int:
bin = self.getBinary(num)
n = 0 # n 用于存储权值之和
i = 0
for x in bin[-1: :-1]: # 从低位向高位遍历
if x == '0':
n += 2**i
else:
pass
i += 1
return n
def getBinary(self, t): # 这个函数用于得到二进制字符串
s = ''
while t > 1 :
s += str(t % 2)
t = int(t/2)
s += str(t)
ss = s[::-1]
return ss
关注我的公众号免费获取海量python 学习资料!!!