题目链接:力扣
我的做题思路:因为两个字符串可能不一样长,所以需要给短的那个字符串补0,先求出两个字符串的长度,然后从后面开始相加,用一个中间数来记录相加之后如果有进位产生的进位数字,做加法的时候需要将字符转换成数字(字符-'0')就可以将字符转成数字。在循环中定义一个add来做加法。将需要存储的数字从返回结果result的头部插入(result.insert(result.begin(),add%2+'0');)。如果加法已经算到字符串的第一位,那么看刚才定义的temp是否有进位,如果有进位,则需要再进行头部插入进位数字。
源码:
class Solution {
public:
string addBinary(string a, string b) {
string result="";
int len1=a.size()-1;
int len2=b.size()-1;
int temp=0;
while(len1>=0||len2>=0||temp!=0){//如果最后前两个条件不成立但是如果temp!=0的话,说明有进位
int x=len1>=0?a[len1]-'0':0;//补0操作和字符转数字
int y=len2>=0?b[len2]-'0':0;
int add=x+y+temp;//记录做加法的结果
result.insert(result.begin(),add%2+'0');//插入
temp=add/2;//记录进位的情况
len1--;
len2--;
}
return result;
}
};
时间复杂度: O(N);
空间复杂度: O(N),新开辟了一个字符串result。