剑指offer——二进制加减法

给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。

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

示例 1:

输入: a = "11", b = "10"
输出: "101"
示例 2:

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

提示:

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

题解:

注意区分字符串赋值   a[i]='0';

字符串开始位置:a.length()-1;

字符串反转:

reverse(res.begin(), res.end());

字符串拼接:

res.push_back('0' + sum % 2);//在其后填0

 1 class Solution {
 2 public:
 3     string addBinary(string a, string b) {
 4        string res="";
 5         int la=a.length()-1;
 6         int lb=b.length()-1;
 7         int maxx=max(la,lb);
 8         int k=0,i=la,j=lb;
 9         while(i>=0||j>=0)
10         {
11             int ca=i>=0?a[i--]-'0':0;
12             int cb=j>=0?b[j--]-'0':0;
13             int now=ca+cb+k;
14             k=now>=2?1:0;
15             res.push_back('0' + now% 2);
16         }
17           if (k != 0) res.push_back('0' +k);
18           reverse(res.begin(), res.end());
19           return res;
20     }
21 };
原文地址:https://www.cnblogs.com/sylvia1111/p/15712782.html