目录

题目描述:

整体思路:

具体代码:


 

题目描述:

原题地址

给你两个二进制字符串 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;
    }
};

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部