算法日常・每日刷题--<字符串>3
2026/8/5 11:18:40 网站建设 项目流程

67. 二进制求和 - 力扣(LeetCode)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" ,就不含前导零https://leetcode.cn/problems/add-binary/

题目描述

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

示例: 输入:a = "11", b = "1" 输出:"100"

解题思路

二进制字符串相加和手工竖式加法思路一致:从最低位(字符串末尾)开始相加,保存进位

  1. 使用双指针分别指向两个字符串尾部,模拟从低位向高位遍历;
  2. 每次把两个指针指向的数字加上进位t
  3. 当前结果位 = 总和 % 2,新进位 = 总和 / 2;
  4. 循环结束后如果进位不为 0,需要额外补上最高进位;
  5. 我们得到的结果字符串是低位在前,最后反转一次得到正确顺序。
#include<string> #include<algorithm> class Solution { public: string addBinary(string a, string b) { int cur1=a.size()-1,cur2=b.size()-1; string ret; int t=0; while(cur1>=0||cur2>=0) { if(cur1>=0) t += a[cur1--] - '0'; if(cur2>=0) t += b[cur2--] - '0'; ret+='0' + (t % 2); t=t/2; } if(t==1) ret+='0' + t; reverse(ret.begin(), ret.end()); return ret; } };

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询