LeetCode 67. 二进制求和

LeetCode 67. 二进制求和

题目描述

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

示例 1:

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

示例 2:

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

解题思路

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

  • 用指针 i 和 j 分别指向字符串 a 和 b 的末尾(最低位)。
  • 用变量 carry 记录当前位的和及进位(初始为 0)。
  • 当 i 或 j 未越界,或仍有进位时循环:
    • 若 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]=1 → carry=1 加 b[0]=1 → carry=2 2 '0'
进位更新 - - - carry=2/2=1 1 -
第2次循环 0 -1 1 加 a[0]=1 → carry=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"。

小结

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

复制代码
相关推荐
ZhengEnCi2 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
秋天的怀念_David2 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Pniubi3 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6183 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang3 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
2601_970703834 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心中有你02144 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
ZhengEnCi6 小时前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
Flynn Liang6 小时前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai
liminla!6 小时前
SQL 从入门到进阶:语法速查与实战练习(完整优化版)
数据库·sql·算法