leetcode 67.二进制求和
题目描述
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
解题思路
两个字符串同时从后向前遍历,对于位相加,再加上进位符三者进行运算,需要注意的是字符串第零哥位置进位的情况
class Solution {
public:
string addBinary(string a, string b) {
int aLen = a.size()-1, bLen = b.size()-1;
string res = "";
char carry = 0; // 进位标志
while(aLen>=0 || bLen>=0){
int temp = 0; // 存储字符串对应位相加的结果
if(aLen >= 0){
temp = a[aLen] - '0';
aLen--;
}
if(bLen >= 0){
temp += (b[bLen] - '0');
bLen--;
}
int str = (temp+carry)%2; // 加上进位符,计算当前位的数值
res.insert(0, 1, str + '0'); // 在当前字符串的首部插入运算结果
carry = (temp+carry)/2; // 是否进位
}
if(carry){ // 第零位进位的情况
res.insert(0, 1, '1');
}
return res;
}
};
欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步