题目描述:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
分析:在完成代码之前,我们首先看看这一题应该是一个什么样子的思路。首先,输入两个字符串a和b,如果两个字符串中元素个数不相等,我们应该天添加0使其位数相等,方便进行运算,涉及到元素个数,所以我们应该在最开始求出各个字符串中的长度。由于字符串中的元素1和0不是数字1和0,故按照ASCII码表,我们应该把它转换成数字,a[i]-'0'。最后我们还需要一个进位标志,如果a[i]和b[j]都为1,则需要进位。
代码如下
class Solution {
public:string addBinary(string a, string b) {string result; //用来存放结果int a_len = a.size(); //字符串的长度int b_len= b.size();int n = max(a_len, b_len);bool carry = false; //进位标志if (a_len > b_len) {for (int i = 0; i < a_len - b_len; ++i) b.insert(b.begin(), '0'); //在前面位 //置加0使两个字符串长度相等}else if (a_len < b_len) {for (int i = 0; i < b_len - a_len; ++i) a.insert(a.begin(), '0');}for (int i = n - 1; i >= 0; --i) {int tmp = 0;if (carry) tmp = (a[i]-'0') + (b[i]-'0') + 1; //字符串中的0表示十进制数48,所 //以应该减去‘0’才能表示数字1else tmp = (a[i]-'0' ) + (b[i]-'0');if (tmp == 0) {result.insert(result.begin(), '0'); carry = false;}else if (tmp == 1) {result.insert(result.begin(), '1');carry = false;}else if (tmp == 2) {result.insert(result.begin(), '0');carry = true;}else if(temp==3){result.insert(result.begin(), '1');carry=false;}}if (carry) result.insert(result.begin(), '1');return result;}
};