难度简单534
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字
1
和0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
提示:
- 每个字符串仅由字符
'0'
或'1'
组成。1 <= a.length, b.length <= 10^4
- 字符串如果不是
"0"
,就都不含前导零。
这个问题的思路,和二进制列竖式计算方式一样的。
主要注意的是,要先把二进制的位数对齐,前面不够的补上0就可以了,其次是记得在计算式要根据ASCII码来减去96。前面我忘记了提交一直报错还找不到问题所在,很头疼,后来才发现ASCII的问题。那么,在以后遇到string类型的加减计算我应该都要记得ASCII的重要性了。
我这里考虑进位的情况是增加了add变量,如果需要进位的add=1,不需要add=0,然后在计算时把add加进去就好了。
class Solution {
public:
string addBinary(string a, string b) {
string res = "";
int lena = a.length();
int lenb = b.length();
if (lena < lenb ){
for(int i = 0; i < lenb - lena; i++){
a = "0" + a;
}
}else if (lena > lenb){
for(int i = 0; i < lena - lenb; i++){
b = "0" + b;
}
}
// cout << a << " " << b ;
int len = a.length();
int add = 0;
for(int i = len - 1; i >= 0; i--){
if(a[i] + b[i] + add - 96== 2){
res = "0" + res;
add = 1;
}else if (a[i] + b[i] + add - 96 == 3){
res = "1" + res;
add = 1;
}else if (a[i] + b[i] + add - 96 == 1){
res = "1" + res;
add = 0;
}else if (a[i] + b[i] + add - 96 == 0) {
res = "0" + res;
add = 0;
}
}
// cout << add;
if (add == 1){
res = "1" + res;
// cout << res;
}
return res;
}
};