bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
>>>bin(10)
'0b1010'
>>> bin(20)
'0b10100'
>>>int('0b1010', 2)
'10'
>>>int('0b10100', 2)
'20'
给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。
注意:
示例1:
输入: 5 输出: 2 解释: 5的二进制表示为101(没有前导零位),其补数为010。所以你需要输出2。
示例2:
输入: 1 输出: 0 解释: 1的二进制表示为1(没有前导零位),其补数为0。所以你需要输出0。
暴力解法,把数字转换成二进制字符串去掉0b
, 用遍历的方法取字符串补码, 再转回十进制数。
class Solution:
def findComplement(self, num):
"""
:type num: int
:rtype: int
"""
str_num = str(bin(num))[2:]
anti_num = []
for e, i in enumerate(str_num):
if i == '0':
anti_num.append("1")
else:
anti_num.append("0")
anti_num.insert(0, "0b")
anti_num = "".join(anti_num)
return int(anti_num, 2)
class Solution:
def findComplement(self, num):
"""
:type num: int
:rtype: int
"""
n = len(bin(num))-2
return num^(2**n-1)
思路是,取出去除0b
的二进制数‘长度’ n
, 通过n
求出num
‘位数’全置1
的十进制数, 在与num
亦或即可得到补数。(补数的性质啊喂。。。这都没想出来)