1. 题目来源
链接:67. 二进制求和
2. 题目解析
前导题:
就是高精度加法。模板题。在此针对 t
进位的处理很巧妙,因为 t
最后进位一定是 1,且进位的数也是 1,这个写法很巧妙!其中高精度乘法也是这个思想和做法!
- 时间复杂度: O ( n ) O(n) O(n)。
- 空间复杂度: O ( 1 ) O(1) O(1)
代码:
class Solution {
public:
string addBinary(string a, string b) {
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
string res;
for (int i = 0, t = 0; i < a.size() || i < b.size() || t; i ++ ) {
if (i < a.size()) t += a[i] - '0';
if (i < b.size()) t += b[i] - '0';
res += to_string(t % 2); // 在此最后有进位,则 t 一定为 1,统一了特殊情况
t /= 2;
}
reverse(res.begin(), res.end());
return res;
}
};