67. 二进制求和

1.题目:https://leetcode-cn.com/problems/add-binary/

2.思路

(1)两个字符串首先要对齐,然后第一位相加后可能有进位,所以单独列出来;
如何相加是字符,如何相加是数字,需要搞清楚;

(2)
首先让两个字符串等长,若不等长,在短的字符串前补零,否则之后的操作会超出索引。

然后从后到前遍历所有的位数,同位相加,这里有一个点,用的是字符相加,利用 ASCII 码,字符在内部都用数字表示,我们不需要知道具体数值,但可知 ‘0’-‘0’ = 0, ‘0’+1=‘1’,以此类推 。字符的加减,大小比较,实际上都是内部数字的加减,大小比较

判断相加后的字符,若大于等于字符 ‘2’‘2’,下一位需要进一

第 00 位数的相加在这里是单独处理的,因为它可能涉及到字符的插入(即是否需要在最前面加一位数 ‘1’‘1’

3.代码

https://leetcode-cn.com/problems/add-binary/solution/c-xiang-xi-ti-jie-bu-zou-qing-xi-by-youlookdelicio/
class Solution {
public:
    string addBinary(string a, string b) {
        int sizea=a.size();
        int sizeb=b.size();
        
        //首先保证两个string位数是对齐的
        while (sizea<sizeb)
        {
            a='0'+a;
            sizea++;
        }
        while (sizea>sizeb)
        {
            b='0'+b;
            sizeb++;
        }
        for (int i=sizea-1;i>0;--i)
        {
            a[i]=a[i]-'0'+b[i];
            if (a[i]>='2')
            {
                a[i]=(a[i]-'0')%2+'0';
                a[i-1]=a[i-1]+1;
            }
        }
        
        //第0位单独列出来
        a[0]=a[0]-'0'+b[0];
        if (a[0]>='2')
        {
            a[0]=(a[0]-'0')%2+'0';
            a='1'+a;
        }
        return a;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值