Given two binary strings, return their sum (also a binary string).
For example,
a =
"11"b =
"1"Return
"100".-------------------
Solution #1, Straight forward
class Solution {
public:
string addBinary(string a, string b) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int pre = 0, length = 0;
string lon,sht;
// find the longer string
if (a.length() > b.length()) {
length = a.length();
lon = a;
sht = b;
}else {
length = b.length();
lon = b;
sht = a;
}
for (int i=length-1;i>=0;i--) {
if (sht.length() >= length - i) {
if (sht[sht.length() - length + i] == '1' && lon[i] == '1') { // 1 + 1
if (pre == 0) {
lon[i] = '0';
pre = 1;
}
}else if (sht[sht.length() - length + i] == '0' && lon[i] == '0') { // 0 + 0
if (pre == 1) {
lon[i] = '1';
pre = 0;
}
}else if (pre == 1) { // '0'+'1'
lon[i] = '0';
pre = 1;
}else {
lon[i] = '1';
}
}else { // short string ends, long string continues
if (pre == 1) {
if (lon[i] == '1') {
lon[i] = '0';
}else {
lon[i] = '1';
pre = 0;
}
}
}
}
if (pre == 1) { // one more digit
lon = '1' + lon;
}
return lon;
}
};
Update on Jul-10-2015 Solution #2, 加法时转化为integer
class Solution {
public:
string addBinary(string a, string b) {
int m = a.length(), n = b.length();
int len = max(m,n);
int carry = 0;
string s = "";
for (int i = 0; i < len; i++) {
if (i < m) {
carry += a[m - 1 - i] - '0';
}
if (i < n) {
carry += b[n - 1 - i] - '0';
}
char sum = carry % 2 + '0';
s = sum + s;
carry = carry / 2;
}
if (carry) s = '1' + s;
return s;
}
};
No comments:
Post a Comment