LeetCode67——Add Binary
二进制相加,与上一题LeetCode66——Plus One类似。
现在假设两个加数分别 是 111 和 11 则 他们的结果是:1010
如果两个加数分别 是 1111 和 1111 则 他们相加的结果是:11110
以此推断,对于 长度为 m 和长度为 n 的两个数来说
他们相加的结果长度为 max(m,n) + 1
另外,在写代码的时候想到一个小技巧:
比如,两个数长度不一样时,需要处理高位的情况。这里,我们把长度小的数的高位全补上0让它和另一个数的长度一样。
最后返回结果再抹去高位冗余的0即可。
这样做方便处理高位进位的情况。
代码:
class Solution {
public:
string addBinary(string a, string b) {
int aLen = a.size();
int bLen = b.size();
int maxLen = max(aLen, bLen) + 1;
int aCount = 0;
int bCount = 0;
while (aCount < maxLen - aLen)
{
a.insert(a.begin(), '0');
aCount++;
}
while (bCount < maxLen - bLen)
{
b.insert(b.begin(), '0');
bCount++;
}
string result;
int i = a.size() - 1;
int mod = 0;
while (i >= 0 )
{
int aNum = a[i] - '0';
int bNum = b[i] - '0';
int rNum = aNum + bNum + mod;
mod = rNum / 2;
rNum %= 2;
result.insert(result.begin(), rNum + '0');
i--;
}
auto it = result.begin();
while (result.size() > 1 &&* it == '0')
result.erase(it);
return result;
}
};