给你两个二进制字符串 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" ,就不含前导零
ans1. 模仿十进制,进位计算
注意 三目运算符简化对字符的处理
注意 先对string反转,便于遍历时确定下标
注意 对齐后,缺失的串进行特殊处理
class Solution {
public:
string addBinary(string a, string b) {
//记录最大长度
int n = a.length() > b.length() ? a.length() : b.length();
int carry = 0;
string ans;
//反转字符串,从低位开始操作
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
for(int i = 0;i < n; i++){
int left = i < a.length() ? (a[i]-'0') : 0;
int right = i < b.length() ? (b[i]-'0') : 0;
int curr = left + right + carry;
carry = curr/2;
curr = curr%2;
ans.push_back(curr==1?'1':'0');
}
if(carry == 1){
ans.push_back('1');
}
reverse(ans.begin(),ans.end());
return ans;
}
};