LeetCode 67 Add Binary (Binary addition )(*)
Translation
Given two binary strings, return their sum (also a binary string ). For example, a = "11" B = "1" returns 100 ".
Original
Given two binary strings, return their sum (also a binary string).For example,a = "11"b = "1"Return "100".
Analysis
I wrote this algorithm at the beginning. Although it has implemented the function, it does not conform to the question intention.
int ctoi(char c) { return (int)c - 48;}int pow2(int n) { int sum = 1; while ((n--) > 0) sum *= 2; return sum;}int btoi(string s) { int sum = 0, len = s.size(); for (int i = 0; i < len; ++i) { sum += ctoi(s[i]) * pow2(len - i - 1); } return sum;}string itob(int n) { if (n == 0) return "0"; string s = ""; while (n >= 1) { if (n % 2 == 1) s += "1"; else s += "0"; n /= 2; } string newStr = ""; for (int i = s.size() - 1; i >= 0; i--) newStr += s[i]; return newStr;}string addBinary(string a, string b) { return itob(btoi(a) + btoi(b));}
Then I changed the code, and I was so drunk when writing such code ......
string addBinary(string a, string b) { if (a.size() < b.size()) swap(a, b); int len1 = a.size(), len2 = b.size(); int comLen = len1 < len2 ? len1 : len2; int pos = 0; string str = ""; for (int index1 = len1 - 1, index2 = len2 - 1; index1 > len1 - comLen, index2 >= 0; index1--, index2--) { if (pos == 0) { if (a[index1] == '1' && b[index2] == '1') { str += "0"; pos = 1; } else if (a[index1] == '0' && b[index2] == '0') { str += "0"; } else { str += "1"; } } else if (pos == 1) { if (a[index1] == '1' &&b[index2] == '1') { str += "1"; pos = 1; } else if (a[index1] == '0' && b[index2] == '0') { str += "1"; pos = 0; } else { str += "0"; pos = 1; } } } for (int index = len1 - comLen-1; index >= 0; index--) { if (pos == 0) { if (a[index] == '1') { str += "1"; } else { str += "0"; } } else if (pos == 1) { if (a[index] == '1') { str += "0"; pos = 1; } else { str += "1"; pos = 0; } } } if (pos == 1) str += "1"; string newStr = ""; for (int i = str.size() - 1; i >= 0; i--) newStr += str[i]; return newStr;}
I did not find any very concise code after turning around, so let's do it first ......