LeetCode 67. 二进制求和

LeetCode 67. 二进制求和

题目描述

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

示例 1:

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

示例 2:

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

解题思路

二进制加法与十进制加法类似,从低位到高位逐位相加并处理进位。区别在于二进制是"逢二进一"。模拟竖式计算过程:

  • 用指针 ij 分别指向字符串 ab 的末尾(最低位)。
  • 用变量 carry 记录当前位的和及进位(初始为 0)。
  • ij 未越界,或仍有进位时循环:
    • i 未越界,将 a[i] 转换为数字加到 carry,左移 i
    • j 未越界,将 b[j] 转换为数字加到 carry,左移 j
    • 当前位结果为 carry % 2,转换为字符插入结果字符串。
    • 更新进位 carry = carry / 2
  • 反转结果字符串得到正确顺序。

巧妙之处:

  • 合并"当前位和"与"进位"为同一变量 carry
  • 循环条件覆盖所有情况(包括剩余进位)。
  • 单循环处理两字符串剩余部分。

代码实现

cpp 复制代码
class Solution {
public:
    string addBinary(string a, string b) {
        int i = a.size() - 1, j = b.size() - 1, carry = 0;
        string res;
        while (i >= 0 || j >= 0 || carry) {
            if (i >= 0) carry += a[i--] - '0';
            if (j >= 0) carry += b[j--] - '0';
            res.push_back(carry % 2 + '0');
            carry /= 2;
        }
        reverse(res.begin(), res.end());
        return res;
    }
};

复杂度分析

  • 时间复杂度O(max(m, n)),需遍历两字符串各一次。
  • 空间复杂度O(max(m, n)),存储结果字符串所需空间。

示例演示

a = "11", b = "1" 为例:

步骤 i j carry(进入循环时) 操作 新 carry 当前位结果
初始化 1 0 0 - - -
第1次循环 1 0 0 a[1]=1carry=1b[0]=1carry=2 2 '0'
进位更新 - - - carry=2/2=1 1 -
第2次循环 0 -1 1 a[0]=1carry=2 j<0 不加 2 '0'
进位更新 - - - carry=2/2=1 1 -
第3次循环 -1 -1 1 i<0 不加 j<0 不加 1 '1'
进位更新 - - - carry=1/2=0 0 -

结果字符串依次存入 '0', '0', '1',反转后为 "100"

小结

本题是模拟竖式加法的经典问题。通过合并当前位和与进位,并利用循环条件简化代码。该思路可扩展至其他进制(如十进制、十六进制),仅需调整模数和除数。

复制代码
相关推荐
Jerry1 小时前
LeetCode 101. 对称二叉树
算法
可编程芯片开发2 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星2 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮2 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home84072 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>3 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
To_OC4 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC4 小时前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode
数字杂技师4 小时前
每条推荐都很准,为什么我还是越刷越无聊?
算法
兰令水4 小时前
hot100【acm版】【2026.7.14打卡-java版本】
java·数据结构·算法·leetcode·面试