leecode个人心得
初入leecode记录自己在刷题过程中遇到的题目
-
- 二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。
- 二进制求和
输入为 非空 字符串且只包含数字 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;
}
};