目录
题目描述:
整体思路:
具体代码:
题目描述:
原题地址
给你两个二进制字符串
a
和b
,以二进制字符串的形式返回它们的和。示例 1:
输入:a = "11", b = "1" 输出:"100"示例 2:
输入:a = "1010", b = "1011" 输出:"10101"提示:
1 <= a.length, b.length <= 104
a
和b
仅由字符'0'
或'1'
组成- 字符串如果不是
"0"
,就不含前导零
整体思路:
按照模2加法的执行过程,从低位加到高位,用int型去执行加法运算,再用to_string()函数转换成string添加到ans。主要注意a和b长度不一致的情况和涉及进位的计算。最后别忘了检查进位是否为1,若为1则代表最高位数据位有进位。
具体代码:
class Solution {
public:string addBinary(string a, string b) {if(a.size()<b.size()) return addBinary(b,a);//make sure a.size>b.sizeint count=0,sum=0;string ans;for(int i=a.size()-1,j=b.size()-1;i>=0;i--){if(j>=0){sum=((a[i]-'0')+(b[j]-'0')+count)%2;count=((a[i]-'0')+(b[j]-'0')+count)/2;j--;}else{//when shorter string was finished.Only need to calculate longer one.sum=(a[i]-'0'+count)%2;count=(a[i]-'0'+count)/2;}ans+=to_string(sum);}if(count!=0) ans+=to_string(count);//don't forget to check if count is 1reverse(ans.begin(),ans.end());return ans;}
};