67. 二进制求和

难度简单398

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 10

示例 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;

}
};