leecode个人心得

leecode个人心得
初入leecode记录自己在刷题过程中遇到的题目

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

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

示例 1:

输入: a = “11”, b = “1”
输出: “100”
示例 2:

输入: a = “1010”, b = “1011”
输出: “10101”

提示:

每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 “0” ,就都不含前导零。

解题思路:
参考
二进制求和,满二进一

首先让两个字符串等长,若不等长,在短的字符串前补零,否则之后的操作会超出索引。
然后从后到前遍历所有的位数,同位相加,这里有一个点,用的是字符相加,利用 ASCII 码,字符在内部都用数字表示,我们不需要知道具体数值,但可知 ‘0’-‘0’ = 0, ‘0’+1=‘1’,以此类推 。字符的加减,大小比较,实际上都是内部数字的加减,大小比较
判断相加后的字符,若大于等于字符 ‘2’‘2’,下一位需要进一
第 00 位数的相加在这里是单独处理的,因为它可能涉及到字符的插入(即是否需要在最前面加一位数 ‘1’‘1’

class Solution {
public:
    string addBinary(string a, string b) {
        int num1=a.size();
        int num2=b.size();
        while(num1<num2)//如果a的长度小于b
        {
           a='0'+a;
           num1++;
        }
        while(num1>num2)//如果b的长度小于a
        {
           b='0'+b;
           num2++;
        }
        for(int i=a.size()-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;
            }
        }
        a[0]=a[0]-'0'+b[0];
        if(a[0]>='2')
        {
            a[0]=(a[0]-'0')%2+'0';
            a='1'+a;
        }
        return a;
    }
};
上一篇:02 反转字符串II(leecode 541)


下一篇:【Leecode笔记之java】第十五周(12.14-12.20)字符串专题