问题:
给定两个二进制字符串,返回他们的和(用二进制表示)。
样例:
样例 1:
输入: a = "0", b = "0" 输出: "0"
样例 2:
输入: a = "11", b = "1" 输出: "100"
python:
class Solution:
"""
@param a: a number
@param b: a number
@return: the result
"""
def addBinary(self, a, b):
# write your code here
if a == None:
return b
if b == None:
return a
A = []
B = []
result = []
resultString = ""
flag = 0
for i in range(len(a)):
A.append(int(a[i]))
for j in range(len(b)):
B.append(int(b[j]))
maxLen = max(len(A), len(B))
for k in range(-1, -1*(maxLen+1), -1):
if(-1*k <= len(A) and -1*k <= len(B)):
result.insert(0, (A[k]+B[k]+flag)%2)
flag = (A[k]+B[k]+flag) // 2
continue
if(-1*k > len(B)):
result.insert(0, (A[k]+flag)%2)
flag = (A[k]+flag) // 2
continue
if(-1*k > len(A)):
result.insert(0, (B[k]+flag)%2)
flag = (B[k]+flag) // 2
continue
if flag == 1:
result.insert(0, 1)
for m in range(len(result)):
resultString += str(result[m])
return resultString
C++:
class Solution {
public:
/**
* @param a: a number
* @param b: a number
* @return: the result
*/
string addBinary(string &a, string &b) {
// write your code here
stack<int> A;
stack<int> B;
stack<int> result;
string resultString = "";
int flag = 0;
for(int i = 0; i < a.size(); i++)
{
A.push(int(a[i]-'0'));
}
for(int j = 0; j < b.size(); j++)
{
B.push(int(b[j]-'0'));
}
int maxSize = max(A.size(),B.size());
for(int k = 0; k < maxSize; k++)
{
if((!A.empty()) && (!B.empty()))
{
result.push((A.top()+B.top()+flag)%2);
flag = (A.top() + B.top() + flag) / 2;
A.pop();
B.pop();
continue;
}
if(B.empty())
{
result.push((A.top() + flag)%2);
flag = (A.top() + flag) / 2;
A.pop();
continue;
}
if(A.empty())
{
result.push((B.top() + flag)%2);
flag = (B.top() + flag) / 2;
B.pop();
continue;
}
}
if(flag == 1)
{
result.push(1);
}
while(!result.empty())
{
resultString += to_string(result.top());
result.pop();
}
return resultString;
}
};
PS:这个题可以走捷径,先换成十进制再换成二进制
python:
class Solution:
"""
@param a: a number
@param b: a number
@return: the result
"""
def addBinary(self, a, b):
# write your code here
if a == None:
return b
if b == None:
return a
A = int(a, 2)
B = int(b, 2)
SUM = A + B
result = bin(SUM)[2:]
return result