leetcode67

Add Binary

思路
自己愚蠢的思路:暴力进制转换,利用十进制相加后再次进行转换
大佬:二进制求和,满二进一
1.首先让两个字符串等长,若不等长,在短的字符串前补零,否则之后的操作会超出索引。
2.然后从后到前遍历所有的位数,同位相加,这里有一个点,用的是字符相加,利用 ASCII 码,字符在内部都用数字表示,我们不需要知道具体数值,但可知 ‘0’-‘0’ = 0, ‘0’+1=‘1’,以此类推 。字符的加减,大小比较,实际上都是内部数字的加减,大小比较
3.判断相加后的字符,若大于等于字符 ‘2’,下一位需要进一
4.第 0 位数的相加在这里是单独处理的,因为它可能涉及到字符的插入(即是否需要在最前面加一位数 ‘1’)
【作者:youlookdeliciousc
链接:https://leetcode-cn.com/problems/add-binary/solution/c-xiang-xi-ti-jie-bu-zou-qing-xi-by-youlookdelicio/ 来源:力扣(LeetCode)】

一些语法
1.string也可以直接用.size()来求其长度
2.string和string可以直接相加减

其他
1.ASCII码中数字的如下图:
(二进制|十进制|十六进制|图形)
二进制|十进制|十六进制|图形
代码

class Solution {
public:
    string addBinary(string a, string b) {
        int len_a=a.size();
        int len_b=b.size();
        while(len_a>len_b){
            b='0'+b;//直接在前面加一位
            len_b++;
        }
        while(len_a<len_b){
            a='0'+a;//直接在前面加一位
            len_a++;
        }
        for(int i=len_a-1;i>0;i--)
        {
            a[i]=a[i]-'0'+b[i];//算出a[i]和‘0’之间相差的整数,再加给b[i]
            while(a[i]>='2'){//因为a[i]是字符
                a[i]=a[i]-'2'+'0';//同样的,前面算出了差值,后面得加上
                a[i-1]=a[i-1]+1;//这里可以直接加上
            }
        }
        a[0]=a[0]-'0'+b[0];//算出a[0]和‘0’之间相差的整数,再加给b[0]
        if(a[0]>'1')//注意是字符
        {
            a='1'+a;//在a前面加一位
            a[1]=a[1]-'2'+'0';//和上面一样
        }
        return a;
    }
};

注意在加减的地方,因为是ASCLL码,注意是加减数字还是字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值