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"

小结

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

复制代码
相关推荐
靴子学长17 小时前
Decoder only 架构下 - KV cache 的理解
pytorch·深度学习·算法·大模型·kv
寒秋花开曾相惜17 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
Гений.大天才17 小时前
2026年计算机领域的年度主题与范式转移
算法
njidf17 小时前
C++与Qt图形开发
开发语言·c++·算法
ZoeJoy817 小时前
算法筑基(一):排序算法——从冒泡到快排,一文掌握最经典的排序算法
数据结构·算法·排序算法
qwehjk200817 小时前
代码动态生成技术
开发语言·c++·算法
承渊政道18 小时前
【优选算法】(实战体会位运算的逻辑思维)
数据结构·c++·笔记·学习·算法·leetcode·visual studio
Frostnova丶18 小时前
LeetCode 2573. 找出对应 LCP 矩阵的字符串
算法·leetcode·矩阵
承渊政道18 小时前
【优选算法】(实战推演模拟算法的蕴含深意)
数据结构·c++·笔记·学习·算法·leetcode·排序算法
林鸿群18 小时前
实现支持纳秒级精度的时间引擎(C++)
算法·定时引擎