目录
题目描述:
给你两个二进制字符串
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.size
int 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 1
reverse(ans.begin(),ans.end());
return ans;
}
};
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 【Leetcode 67 Easy】二进制求和
发表评论 取消回复