Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
这道也是水题,但是注意有前导0,还有全0的时候输出为0。.还有最后结果的处理。
#include <iostream> #include <string> using namespace std; class Solution { public: string addBinary(string a, string b) { if (a.empty()) { return b; } if (b.empty()) { return a; } int i = 0; int j = 0; for (; i < a.size(); ++i) { if (a[i] != ‘0‘) { break; } } if (i == a.size()) { a.clear(); } else { a = a.substr(i); } for (; j < b.size(); ++j) { if (b[j] != ‘0‘) { break; } } if (j == b.size()) { b.clear(); } else { b = b.substr(j); } int size = a.size() > b.size() ? a.size()+1 : b.size()+1; string res(size, ‘0‘); int k = res.size() - 1; if (k==0) { return "0"; } i = a.size() - 1; j = b.size() - 1; int flag = 0; while(i >= 0 && j >= 0) { int num1 = a[i--] - ‘0‘; int num2 = b[j--] - ‘0‘; int tmp = num1+num2 +flag; res[k--] = tmp % 2+ ‘0‘; flag = tmp / 2; } while (i >= 0) { int num1 = a[i--] - ‘0‘; int tmp = num1+flag; res[k--] = tmp % 2+ ‘0‘; flag = tmp / 2; } while (j >= 0) { int num2 = b[j--] - ‘0‘; int tmp = num2 +flag; res[k--] = tmp % 2 + ‘0‘; flag = tmp / 2; } if (0 != flag && k >= 0) { res[k--] = flag + ‘0‘; } return res.substr(++k); } }; int main() { Solution s; printf("%s\n", s.addBinary("00", "000").c_str()); };
leetcode Add Binary,布布扣,bubuko.com
原文:http://blog.csdn.net/boyxiaolong/article/details/22865381