「亚麻」圣诞节 刷 67 ~ 二进制加法
基本信息
- 题号:67
 - 题厂:亚麻
 - 难度系数:低
 
已知两个二进制字符串,返回这两个字符串相加后结果
例如 a = "11", b = "1" 返回 "100"
解题思路
- 因为 a b 字符串长度不等,所以要从末尾往前相加
 - 遇上加减问题,一般需要一个 carry 协助进位计算
 
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        i, j = len(a) - 1, len(b) - 1
        carry = 0
        res = ""
        while i >= 0 or j >= 0:
            cur = ""
            # 考虑数组越界问题,当 index 小于 0 时,当前字符为 0
            cur_a = a[i] if i >= 0 else "0"
            cur_b = b[j] if j >= 0 else "0"
            # 计算的时候,分 3 种情况考虑
            # 同时为 1 的情况下考虑进位不进位
            # 同时为 0 的情况下考虑进位不进位
            # 一个 1 一个 0 时的进位不进位情况
            if cur_a == "1" and cur_b == "1":
                if carry == 1:
                    cur = "1"
                else:
                    cur = "0"
                carry = 1
            elif cur_a == "0" and cur_b == "0":
                if carry == 1:
                    cur = "1"
                else:
                    cur = "0"
                carry = 0
            else:
                if carry == 1:
                    cur = "0"
                    carry = 1
                else:
                    cur = "1"
                    carry = 0
            res = cur + res
            i -= 1
            j -= 1
        # 跳出循环后,如果 carry 为 1,还需要再额外加一次。。。
        if carry:
            res = "1" + res
        return res
Constraints
1 <= a.length, b.length <= 104a and b consist only of '0' or '1' characters.Each string does not contain leading zeros except for the zero itself.
测试
- a b 同时为 0 的特殊情况
 - a b 长度不等时
 - a b 有进位的需求情况
 - ……
 
Big O
时间复杂度:O(n), n = max(len(a),len(b))- 空间复杂度:O(1)
 
总结
- 复习了二进制加法。。。。。。有别于常规的二进制加减。。。。。。
 
