标签:
按照正常思路进行加法即可,设定一个进位变量carry,然后进行模拟
class Solution {
public:
string addBinary(string longStr, string shortStr) {
string res;
if (longStr.size() < shortStr.size())
{
res = longStr;
longStr = shortStr;
shortStr = res;
}
res = longStr;
int carry = 0, bit = 0;
int i = shortStr.size() - 1, j = longStr.size() - 1;
for (; i >= 0; i--, j--)
{
bit = shortStr[i] + longStr[j] + carry -‘0‘ - ‘0‘;
switch (bit)
{
case 0:
carry = 0;
break;
case 1:
res[j] = ‘1‘;
carry = 0;
break;
case 2:
res[j] = ‘0‘;
carry = 1;
break;
case 3:
res[j] = ‘1‘;
carry = 1;
break;
default:
break;
}
}
while (carry != 0 && j>=0)
{
bit = longStr[j] + carry - ‘0‘;
switch (bit)
{
case 1:
res[j] = ‘1‘;
carry = 0;
break;
case 2:
res[j] = ‘0‘;
carry = 1;
j--;
break;
default:
break;
}
}
if (carry == 1)
{
res = "1" + res;
}
return res;
}
};
在评论区看到一个简短的代码,我做了一些小优化,性能和以上代码一样都是6ms,但是很值得学习
class Solution
{
public:
string addBinary(string a, string b)
{
string s = "";
int c = 0, i = a.size() - 1, j = b.size() - 1;
while (i >= 0 || j >= 0 || c == 1)
{
c += i >= 0 ? a[i--] - ‘0‘ : 0;
c += j >= 0 ? b[j--] - ‘0‘ : 0;
s = char((c & 1)+ ‘0‘) + s;
c = c >> 1;
}
return s;
}
};
标签:
原文地址:http://www.cnblogs.com/flyjameschen/p/4325278.html