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',因此要去掉前两位

猜你喜欢

转载自www.cnblogs.com/Aprilnn/p/9300618.html