难度简单398
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例 1:
1 2
| 输入: a = "11", b = "1" 输出: "100"
|
示例 2:
1 2
| 输入: a = "1010", b = "1011" 输出: "10101"
|
提示:
- 每个字符串仅由字符
'0'
或 '1'
组成。
1 <= a.length, b.length <= 10^4
- 字符串如果不是
"0"
,就都不含前导零。
模拟题,用j来从后往前遍历;
一开始搞错的原因是因为忘记在result.push_back之后加上temp=0了,佛佛佛
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| class Solution { public: string addBinary(string a, string b) { vector<int>result;
int n=a.size(); int m=b.size(); int maxn=max(n,m); int out=0; int temp=0; for(int j=0;j<maxn;++j){ if(n-j>0){ temp+=(int)(a[n-j-1]-'0');
} if(m-j>0){ temp+=(int)(b[m-j-1]-'0'); } temp+=out; out=0; if(temp>=2){ temp-=2; out=1; } result.push_back(temp); temp=0; } if(out==1){ result.push_back(1); } string res; for(int i=result.size()-1;i>=0;--i){ if(result[i]==1){ res=res+'1'; }else{res=res+'0';}
} return res;
} };
|