leetcode二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0

示例1:

输入: a = "11", b = "1"
输出: "100"

示例2:

输入: a = "1010", b = "1011"
输出: "10101"

提示:

每个字符串仅由字符 '0''1' 组成。

1 <= a.length, b.length <= 10^4

字符串如果不是 "0" ,就都不含前导零。

整体思路:

我们通过举例子手动运算可以知道相加有三种情况

(1)0+0=0进0

(2)0+1=1+0=1进0

(3)1+1=1进1

这三种情况我们都考虑了a,b和进位数,因此从这个来入手。

相加时除了判断两个数相加是否为2还需要判断是否之前的有进位1,需要对进位进行处理,count即表示有无进位,res是我们的结果集。

代码题解:

class Solution {
public:
    string addBinary(string a, string b) {
    if(b.size()>a.size())//a存放长度较大的字符串
        {
            string temp=b;
            b=a;
            a=temp;
        }
    int m=a.size();//m为大,所以我们对b字符串进行补位时就要补成m位
    int n=b.size();
    for(int k=0;k<m-n;k++)//字符串加字符串,加到m-n-1位即可
    {
        b="0"+b;//字符加字符
    }
    string res;
    int count=0;
    for(int i=m-1;i>=0;i--)
    {
        if((a[i]-'0'+b[i]-'0'+count)==0)//上述第一种情况
        {
           res="0"+res;//每段的这个地方的相加以及count的赋值是值得好好思考的地方
           count=0;
        }
        else if((a[i]-'0'+b[i]-'0'+count)==1)
        {
            res="1"+res;
            count=0;
        }
        else if((a[i]-'0'+b[i]-'0'+count)==3)//这个就是本身1+1而且还有进位的情况
        {
            res="1"+res;
            count=1;
        }
        else
        {
            res="0"+res;
            count=1;
        }
    }
    if(count==1)//最后的位数相加如果还有进位,那就进1,“1”+res
    res="1"+res;
    return res;//最后返回结果集
    }
};

整体代码未经优化,不太好理解的可以直接带例子进去就比较好理解。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值