題目鏈接:
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;
}
};