题目链接:
https://leetcode.com/problems/add-binary/description/
描述
Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
输入
输入两个字符串,a和b,求二进制和并以字符串形式返回。
输出
返回一个字符串。
样例输入
”11” “1” |
样例输出
”100” |
算法思想:
使用的思想是大数相乘的思想,只不过这里使用的是大数相加的。
源代码
class Solution {
public:
string addBinary(string a, string b) {
int carr = 0,len1 = a.length(),len2 = b.length();
int len = max(len1,len2);
string str;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
for(int i = 0;carr || i < len;i++)
{
if(i < len1 && i < len2)
{
carr += (a[i] - '0') + (b[i] - '0');
}
else if(i < len2)
{
carr += (b[i] - '0');
}
else if(i < len1)
carr += (a[i] - '0');
str += (carr % 2) + '0';
carr /= 2;
}
reverse(str.begin(),str.end());
cout<<str<<endl;
return str;
}
};
最优源代码
最优算法也是使用大数相加的思想。
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 % 2 + '0') + s;
c /= 2;
}
return s;
}
};