问题描述:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
执行结果:
代码描述:
注意string的顺序,低位在右侧,高位在左侧。两个string,需要右侧对齐进行相加。
两个字符串,分别从末尾开始,每次取出一个字符,减去字符 '0',得到的是ASC码的差值,转换成数字 0 或 1;
对两个数字相加,并判断是否需要进位。
class Solution {
public:
string addBinary(string a, string b) {
string res = "";
int m = a.size() - 1;
int n = b.size() - 1;
int carry = 0;
while(m >= 0 || n >= 0)
{
int p = m >= 0 ? a[m--] -'0' : 0;
int q = n >= 0 ? b[n--] -'0' : 0;
int sum = p + q + carry;
res = to_string(sum % 2) +res; // 此处,算好的值 + 上一次的res,得到新的res
carry = sum/2;
}
return carry == 1 ? "1" + res : res;
}
};