每日一题,防止痴呆 = =
一、题目大意
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
二、题目思路以及AC代码
思路
这题思路无非就是两种,一种是转化为十进制数,直接利用加法去做,当然这里给定二进制数长度最大时10000,所以可能需要利用大数加法来做。另一种就是直接模拟进行加法。
这里我是直接模拟来做的,直接设立指针从最后开始往前加和即可,详细见代码,双百pass。
AC代码
class Solution {
public:
string addBinary(string a, string b) {
string res;
int carry = 0;
int pa = a.length() - 1;
int pb = b.length() - 1;
int num_a, num_b;
while (pa >= 0 || pb >= 0) {
num_a = pa>=0?a[pa]-'0':0;
num_b = pb>=0?b[pb]-'0':0;
int temp = num_a + num_b + carry;
res += (temp & 1) + '0';
carry = (temp & 2) >> 1;
pa--;
pb--;
}
if (carry) res += "1";
reverse(res.begin(), res.end());
return res;
}
};
如果有问题,欢迎大家指正!!!