67.二进制求和

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= a.length, b.length <= 104
  • a 和 b 仅由字符 '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]


             
相关推荐
Cccp.1235 分钟前
【leetcode】(七)前缀树和贪心算法
数据结构·leetcode·贪心算法
千里码aicood8 分钟前
基于CART算法的图书分类系统设计与实现
数据库·算法·分类
做cv的小昊39 分钟前
【World Model】π0.5:a Vision-Language-Action Model with Open-World Generalization
人工智能·算法·机器学习·大模型·多模态·vla·世界模型
摇滚侠1 小时前
《On Java 中文版 基础卷》阅读笔记 对象无处不在 03
java·笔记·python
لا معنى له1 小时前
World-In-World: World Models in a Closed-Loop World
算法
小小小小钰儿1 小时前
1.5-Python网络编程
开发语言·网络·python·web安全·计算机·网络安全
keke.shengfengpolang2 小时前
2026年金融风控岗技术能力拆解:SQL取数、Python建模、评分卡项目,校招面试到底考什
python
kyrie_sakura2 小时前
大模型学习7 -- 深度学习2 -- 张量
python·深度学习