三个版本
//
class Solution {
public:
string addBinary(string a, string b) {
string res="";
a.length() > b.length() ? res += a : res += b;
for (int i = a.length() - 1, j = b.length() - 1; i >= 0 && j >= 0; i--,j--)
{
res[i>j?i:j] = (char)(a[i] + b[j]-48);
if((i > j ? i : j)>0)
if (res[i > j ? i : j] == '2')
{
//可能出现3的情况,所以不能赋值处理,应该要“取余”
res[(i > j ? i : j)] = '0';
res[(i > j ? i : j)-1]+=(char)('1'-48);
}
}
if (res[0] == '2')
{
res[0] = '0';
return "1" + res;
}
else
return res;
}
};
//没有考虑到会出现3的结果,不只是首位,中间也可以
class Solution {
public:
string addBinary(string a, string b) {
string res="";
a.length() > b.length() ? res += a : res += b;
for (int i = a.length() - 1, j = b.length() - 1; i >= 0 && j >= 0; i--,j--)
{
res[i > j ? i : j] = (char)(a[i] + b[j] - 48);
}
for (int i = res.length() - 1; i >= 0; --i)
{
//这里可以统一当成ascll处理
if (res[i] > 49&&i>0)
{
res[i] = '0';
res[i - 1]++;
}
}
if (res[0] == '2')
{
res[0] = '0';
return "1" + res;
}
else
return res;
}
};
class Solution {
public:
string addBinary(string a, string b) {
string res = "";
a.length() > b.length() ? res += a : res += b;
for (int i = a.length() - 1, j = b.length() - 1; i >= 0 && j >= 0; i--, j--)
{
res[i > j ? i : j] = (char)(a[i] + b[j] - 48);
}
for (int i = res.length() - 1; i >= 0; --i)
{
//这里可以统一当成ascll处理
if (res[i] > 49 && i > 0)
{
res[i] = res[i] % 49 + 47;
res[i - 1]++;
}
}
if (res[0] == '2')
{
res[0] = '0';
return "1" + res;
}
if (res[0] == '3')
{
res[0] = '1';
return "1" + res;
}
else
return res;
}
};
暴漏的问题很多,以前都是字符串直接转换数字,然后在转回来,但是这次怕数字太大就直接字符串处理了。一开始一位可以直接赋值,而且进位没有考虑赋值导致进位少了一个进位(第二个版本中间的错误1010+1011=10001