给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1"
输出: "100" 思路:这种写法既巧妙又简洁,用了两个指针分别指向a和b的末尾,然后每次取出一个字符,
转为数字,若无法取出字符则按0处理,然后定义进位carry,初始化为0,将三者加起来,对2取余即为当前位的数字,
对2取商即为当前进位的值,记得最后还要判断下carry,如果为1的话,要在结果最前面加上一个1。
class Solution {
public:
string addBinary(string a, string b) {
string res="";
int carry=;
int m=a.size()-,n=b.size()-;
while(m>=||n>=)
{
int x=m>=?a[m--]-'':;
int y=n>=?b[n--]-'':;
int sum=x+y+carry;
res=to_string(sum%)+res;
carry=sum/;
}
return carry==?""+res:res; }
};