zoukankan      html  css  js  c++  java
  • 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',因此要去掉前两位
  • 相关阅读:
    经典代码JSKeyword查看(M。。。$)的哦!
    django处理websocket
    产品所有者也应该是Scrum教练吗?
    google的javascript编码规范
    python 处理websocket
    [转] 虚拟座谈会:TDD有多美?
    python 数字相关
    google的python编码规范
    python 函数相关
    python推荐的模块结构
  • 原文地址:https://www.cnblogs.com/Aprilnn/p/9300618.html