码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 67 二进制求和

时间:2018-07-12 22:37:46      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:ddb   直接   str   pen   代码   nbsp   次数   tco   xxx   

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 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‘,因此要去掉前两位

 

Leetcode 67 二进制求和

标签:ddb   直接   str   pen   代码   nbsp   次数   tco   xxx   

原文地址:https://www.cnblogs.com/Aprilnn/p/9300618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!