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:自拟思路——借助列表来推导

  1. 把a和b拆解成两个列表,然后用0填充成等长的列表,然后对应位数相加得出结果。

  2. 补充首位的0,用于进位的情况

  3. 按以下思路进行进位加减


    二进制的逐级叠加
  4. 判断最后结果首位是否是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

上一篇下一篇

猜你喜欢

热点阅读