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',因此要去掉前两位
  • 相关阅读:
    node.js结合wechaty实现微信机器人[基础篇]
    .env文件为NodeJS全局环境变量
    基于jquery实现一个提示插件
    Puppeteer实现一个超简单的自动化机器人
    Vue高仿阿里动态banner,制作组件
    css不常用属性
    Vue表单校验失败滚动到错误位置
    C# Func委托
    深入解析C# 4th 笔记(第一章)
    C# 笔记 XML基础
  • 原文地址:https://www.cnblogs.com/Aprilnn/p/9300618.html
Copyright © 2011-2022 走看看