題目鏈接
tag:
- easy;
- Two Pointers碍拆;
question:
??Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1 or 0.
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
思路:
??兩個(gè)指針分別指向a和b的末尾纺念,然后每次取出一個(gè)字符任岸,轉(zhuǎn)為數(shù)字甘晤,若無法取出字符則按0處理狐血,然后定義進(jìn)位carry撮弧,初始化為0潘懊,將三者加起來姚糊,對(duì)2取余即為當(dāng)前位的數(shù)字,對(duì)2取商即為當(dāng)前進(jìn)位的值授舟,記得最后還要判斷下carry救恨,如果為1的話,要在結(jié)果最前面加上一個(gè)1释树,代碼如下:
class Solution {
public:
string addBinary(string a, string b) {
string res = "";
int m = a.size() - 1, n = b.size() - 1, carry = 0;
while (m >= 0 || n >= 0) {
int tmp1 = m >= 0 ? a[m--] - '0' : 0;
int tmp2 = n >= 0 ? b[n--] - '0' : 0;
int sum = tmp1 + tmp2 + carry;
res = to_string(sum % 2) + res;
carry = sum / 2;
}
return carry == 1 ? "1" + res : res;
}
};