67.二进制求和

给你两个二进制字符串 ab ,以二进制字符串的形式返回它们的和。

示例 1:

复制代码
输入:a = "11", b = "1"
输出:"100"

示例 2:

复制代码
输入:a = "1010", b = "1011"
输出:"10101"

提示:

  • 1 <= a.length, b.length <= 104
  • ab 仅由字符 '0''1' 组成
  • 字符串如果不是 "0" ,就不含前导零

思路:字符串模拟数学运算,从后往前逐位相加,遇2进1,做好进位的记录即可,个人喜欢在进行运算前先对两个字符串进行处理,给短的字符串添加前导0,让两个字符串的长度相同,这样就可以仅用一个指针来同时遍历两个字符串中相同位的数字,也不需要去判断某个字符串是否还没遍历完,容易遗漏和出错;最后还要注意,两位数和两位数相加可能会得到一个三位数,以此类推,我们需要在最后判断是否还存在一个进位,若存在,需要在最前面添加一个1。

这道题很类似,没有做过可以再做一下这道题,巩固一下

题目:415.字符串相加 . - 力扣(LeetCode)

题解:CSDN

代码(Python):

python 复制代码
class Solution(object):
    def addBinary(self, a, b):
        #给短的那个字符串补上前导0
        len1 = len(a)
        len2 = len(b)
        if len1 > len2:
            for i in range(len1-len2):
                b = '0'+b 
        else:
            for i in range(len2-len1):
                a = '0'+a
        index = len(a) -1          #指向对应运算的数字的下标
        flag = 0                   #表示是否有进位
        result = ''                #保存结果
        while index >= 0:
            num = ord(a[index]) - ord('0') +  ord(b[index]) - ord('0')
            if num + flag >= 2:    #若有进位
                result += str(num + flag - 2)
                flag = 1
            else:                  #若没有进位
                result += str(num + flag)
                flag = 0
            index -= 1
        if flag == 1:             #运算完,还有一个进位
            result += '1'
        return result[::-1]


             
相关推荐
小鸡吃米…11 小时前
TensorFlow 实现循环神经网络
人工智能·python·tensorflow
阿钱真强道11 小时前
14 ThingsBoard实战:从零搭建设备配置+设备,完成MQTT温湿度上行/目标温度下行测试(对比JetLinks)
java·网络·python·网络协议
芜湖xin11 小时前
【题解-Acwing】796. 子矩阵的和
算法·前缀和
ssswywywht11 小时前
python练习
开发语言·python
PD我是你的真爱粉11 小时前
RabbitMQRPC与死信队列
后端·python·中间件
shehuiyuelaiyuehao11 小时前
23七大排序算法
数据结构·算法·排序算法
Σίσυφος190011 小时前
E=[T]×R 的证明
算法
喵手11 小时前
Python爬虫实战:医院科室排班智能采集系统 - 从零构建合规且高效的医疗信息爬虫(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·医院科室排版智能采集系统·采集医疗信息·采集医疗信息sqlite存储
TracyCoder12311 小时前
LeetCode Hot100(49/100)——33. 搜索旋转排序数组
算法·leetcode
熬了夜的程序员12 小时前
【LeetCode】116. 填充每个节点的下一个右侧节点指针
算法·leetcode·职场和发展