Leetcode 67 二進制求和


給定兩個二進制字符串,返回他們的和(用二進制表示)。

輸入為非空字符串且只包含數字 1 和 0

示例 1:

輸入: a = "11", b = "1"
輸出: "100"

 

示例 2:

輸入: a = "1010", b = "1011"
輸出: "10101"
  • 解題思路

  先將字符串轉換為整數再轉化為十進制數,進行相加后,再轉換回二進制數

  

def addBinary(a, b):
    x=int(a)#轉換為整數
    y=int(b)
    sum=0
    s=0
    if a=='0' and b=='0':
        return '0'
    if a=='0':
        for j in range(len(b)):
            t = y % 10
            s += t * (2 ** j)
            y = y // 10
        t=s
    elif b=='0':
        for i in range(len(a)):  # 十進制轉二進制
            z = x % 10
            sum += z * (2 ** i)
            x = x // 10
        t=sum
    else:
        for i in range(len(a)):#十進制轉二進制
            z=x%10
            sum+=z*(2**i)
            x=x//10
        for j in range(len(b)):
            t= y % 10
            s += t*(2 ** j)
            y= y// 10
        t=sum+s
    l=[]
    res=''
    for i in range(t):#二進制轉十進制
        n=t%2
        m=t//2
        if m!=0:
            l.append(n)
        else:
            l.append(n)
            break
        t=t//2
        # print(total)
    l.reverse()
    for i in l:
        res+=str(i)
    return res

但這樣循環次數太多,效率太低,參考了別人的代碼發現二進制,十進制間可以直接轉換

print(int(a,2))#二進制轉十進制,a為字符串格式如'111'
print(bin(2))#十進制轉二進制

注:bin()轉換后的數據類型為'str'

  • 大神的實現代碼

  

sum=int(a,2)+int(b,2)
res=bin(sum)#
return res[2:]#十進制轉換為二進制后為'0bxxx',因此要去掉前兩位

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM