题目描述:Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
分析:该题类似于大整数的加法,要求将字符串形式的二进制数相加,返回二进制结果。
需注意:当两个字符串长度不一样时,需将长度较小的那个首部添加0,使得两个加数的长度一样,然后从后往前,逐位相加,有进位时需加进位,字符串处理完后,如果最后的进位为1,则需在结果字符串的首部插入1。
以下是C++ 实现代码,耗时7ms:
class Solution {
public:
string addBinary(string a, string b) {
string re; /* 结果字符串 */
int push = 0,m = 0; /* 进位和模*/
string::size_type la = a.size();
string::size_type lb = b.size();
string::size_type len = 0;
if(la < lb)
a.insert(0,lb - la,'0'); /* 若a较短,则在其头部插入 lb-la个字符‘0’*/
if(la > lb)
b.insert(0,la - lb,'0'); /* 若b较短,则在其头部插入 la-lb个字符‘0’*/
len = la > lb ? la:lb; /* 保存补全后的长度,用于计算时的循环 */
for(string::size_type i = len - 1; i != -1; i--)
{
m = ((a[i] -'0') + (b[i] - '0') + push) % 2;
push = ((a[i] -'0') + (b[i] - '0') + push) / 2;
re.insert(0,1,m + '0'); /* 每计算一位,将其插入结果串的首部 */
}
if(push == 1) /* 处理最后的进位 */
re.insert(0,1,push + '0');
return re;
}
};