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',因此要去掉前两位
  • 相关阅读:
    java新手的session初体验
    菜鸟身份看泛型
    Java初学者不可不知的MyEclipse的设置技巧(自动联想功能)
    GCT之数学公式(几何部分)
    GCT之数学公式(代数部分)
    GCT之语文细节知识
    单元测试的方法
    常用的测试方法
    SQL 经典语句大全
    待处理(一)
  • 原文地址:https://www.cnblogs.com/Aprilnn/p/9300618.html
Copyright © 2011-2022 走看看