看来不管是我写成了几行,别人总是能一行出结果~~
给定一个正整数,输出它的补码数。 补充策略是翻转其二进制表示的位。
注意:给定的整数保证适合在32位有符号整数的范围内。
您可以在整数的二进制表示中不要假定前导零位。
Input: 5 Output: 2 Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
我的
class Solution:
# 十进制转化成二进制
def dec2bin(num):
l=[]
# 负数时进行递归
if num < 0:
return '-' + dec2bin(abs(num)) # abs(num) abs()、int()等等进行类型的转化
while True:
# divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)
num, remainder = divmod(num, 2) #如果是10进制转化成其他进制,将2换成相应数字即可
l.append(str(remainder))
if num == 0:
print( ''.join(l[::-1])) # .join将单个的字符连成字符串
return ''.join(l[::-1])
def findComplement(self, num):
"""
:type num: int
:rtype: int
"""
l2=[]
bin_num=Solution.dec2bin(num)
# 按位取反
for i in range(len(bin_num)):
if(bin_num[i]=='0'):
l2.append(str(1))
else :
l2.append(str(0))
l2=''.join(l2[::1])
print(l2)
# 转化成十进制
# int()第一个参数是字符串 '0Xff' ,第二个参数是说明,这个字符串是几进制的数。 转化的结果是一个十进制数。
return int(l2,2)
a=5
b=Solution.findComplement(a,a)
print(b)
别人的
def findComplement(self, num):
return num ^ ((1 << len(bin(num)) - 2) - 1)
列表: []
Python的列表对象是这个语言提供的最通用的序列。列表是一个任意类型的对象的位置相关的有序集合,他没有固定的大小。不像字符串,其大小是可变的,通过对偏移量进行复制以及其他各种列表的方法进行调用,确实能够修改列表的大小。