letcode[067] 二进制求和
2019-01-03 本文已影响4人
一起学分析
题目067
题目地址:二进制求和
思路1:自拟思路——用内置函数
二进制转十进制后,相加再转为二进制。
总结: 刚好能解决
用时: 64 ms
a = "11"
b = "1"
a = "1010"
b = "1011"
def addBinary1(a, b):
a=int(a,2)
b=int(b,2)
c=a+b
return bin(c)[2:]
思路2:自拟思路——借助列表来推导
-
把a和b拆解成两个列表,然后用0填充成等长的列表,然后对应位数相加得出结果。
-
补充首位的0,用于进位的情况
-
按以下思路进行进位加减
二进制的逐级叠加 -
判断最后结果首位是否是0,是则删除
总结: emmm,怎么会想到这种奇葩思路?
用时: 80 ms
a="0"
b="0"
def addBinary2(a, b):
la=len(a)
lb=len(b)
if la>lb:
a_list=list(a)
b_list=[0]*(la-lb)+list(b)
else:
b_list=list(b)
a_list=[0]*(lb-la)+list(a)
c_list=[]
for i in range(max(la,lb)):
c_list.append(int(a_list[i])+int(b_list[i]))
d_list=[0]+c_list
while 2 in d_list:
for j in range(len(d_list)-1):
if d_list[j+1]==2:
d_list[j]+=1
d_list[j+1]=0
d_str=[str(x) for x in d_list]
result="".join(d_str)
if result[0]=='0':
result=result[1:]
return result