LeetCode 67. Add Binary

这里写图片描述
这就是一个二进制的加法题,两个数都是string的形式,这种题首先要把两个字符串变得长度一致(短的那个前面补0),然后再根据二进制的加法法则进行处理就行了,注意二进制的两位相加总共有四种答案,0(0+0),1(1+0 / 0+1),2(1+1),3(1+1+1(进位得来的))。要分成三种情况进行考虑:
无进位直接保留答案:0、1
进位且保留0:2
进位且保留1:3

以此来做这道题:

string addBinary(string a, string b) {
    string long_str = a.size()>b.size()?a:b;
    string short_str = a.size()>b.size()?b:a;
    while(short_str.size()<long_str.size()){
        short_str = '0'+short_str;
    }
    string temp = "";
    string ans = "";
    int sum = 0;
    for(int i = long_str.size()-1;i >= 0;i--){
        sum += (long_str[i]-'0')+(short_str[i]-'0');
        if(sum == 2){
            temp+='0';
            sum = 1;
        }else if(sum == 3){
            temp+='1';
            sum = 1;
        }else{
            cout<<"here "<<sum<<endl; 
            temp+=sum+'0';
            sum = 0;
        }
    }
    if(sum == 1)
        temp+='1';
    for(int i =temp.size()-1;i>=0;i--){
        ans+=temp[i];
    }
    return ans;
}

注意

string long_str = a.size()>b.size()?a:b;
string short_str = a.size()>b.size()?b:a;

这里要使得当两个字符串长度一致时,long和short要取不同的字符串。否则遇到1+0或者0+1的时候代码回弄成1+1或者0+0.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值