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',因此要去掉前两位
  • 相关阅读:
    SDUT3926 kmp
    SDUT 3930 线段树
    HDU 3277 最大流+二分
    HDU 3081 最大流+二分
    HDU 3605 最大流+状态压缩
    HDU 3572 最大流
    HDU 4576 DP
    POJ 2289 最大流
    POJ 1698 最大流
    poj 3498 最大流
  • 原文地址:https://www.cnblogs.com/Aprilnn/p/9300618.html
Copyright © 2011-2022 走看看