[Lc]67二进制求和
Contents
题目
题解
按位相加即可,注意字符串与整型的转换,数字小的填0,注意进位
- 时间复杂度$O(max{(aLen + bLen)})$
- 空间复杂度$O(max{(aLen + bLen)})$
class Solution {
public:
string addBinary(string a, string b) {
string res = "";//定义结果数组
int aLen = a.size()-1, bLen = b.size()-1;//定义两个字符串的长度
int carry = 0;//定义进位位
while(aLen>=0 || bLen>=0){//两个字符串只要有一位有数字就继续迭代
int m = aLen >=0? a[aLen--]-'0' : 0;//从后往前挨个加,若有字符就转化为数字,没有直接加0
int n = bLen >=0? b[bLen--]-'0' : 0;//同上
int sum = m + n + carry;//两个数字相加,再加上进位
carry = sum/2;//进位更新为相加完后的大于2的部分
res = to_string(sum%2) + res;//res加上加完后小于2的部分
//注意这里不能用+=因为字符串相加要注意顺序
}
return carry? "1"+res:res;//结果要注意,有可能还有进位,就高位加1
}
};
Author ChrisHRZ
LastMod 2020-04-13