67. Add Binary(二进制求和)
题目大意
Given two binary strings a
and b
, return their sum as a binary string.
中文释义
给定两个二进制字符串 a
和 b
,返回它们的和(也是一个二进制字符串)。
示例
- 示例 1:
- 输入:
a = "11"
,b = "1"
- 输出:
"100"
- 输入:
- 示例 2:
- 输入:
a = "1010"
,b = "1011"
- 输出:
"10101"
- 输入:
限制条件
1 <= a.length, b.length <= 10^4
a
和b
仅包含 ‘0’ 或 ‘1’ 字符。- 每个字符串不包含前导零,除了零本身。
解题思路
从字符串的末尾开始,逐位相加,并处理进位。如果最后还有进位,需要在结果前面添加一个 ‘1’。
步骤说明
- 初始化两个指针分别指向两个字符串的末尾,以及一个变量来记录进位。
- 当任一字符串未遍历完时,执行以下操作:
- 从两个字符串中分别取出一个字符(如果存在),将其转换为数字。
- 计算当前位的和及新的进位。
- 将当前位的和(模 2)添加到结果字符串的开头。
- 如果最后有进位,将 ‘1’ 添加到结果字符串的开头。
- 返回结果字符串。
代码
class Solution {
public:
string addBinary(string a, string b) {
int index_a = a.length() - 1, index_b = b.length() - 1, increment = 0;
string ans = "";
while (index_a >= 0 || index_b >= 0) {
int num_a = index_a >= 0 ? a[index_a--] - '0' : 0;
int num_b = index_b >= 0 ? b[index_b--] - '0' : 0;
int sum = num_a + num_b + increment;
ans = to_string(sum % 2) + ans;
increment = sum / 2;
}
if (increment > 0) ans = "1" + ans;
return ans;
}
};