Leecode 67
给你两个二进制字符串,返回它们的和(用二进制表示),输入为 非空 字符串且只包含数字 1 和 0。
例如:
输入: a = "1010", b = "1011"
输出: "10101"
方法一:直接库函数,python或者java有直接的库可以调用
代码:
# python
class Solution:
def addBinary(self, a, b) -> str:
return '{0:b}'.format(int(a, 2) + int(b, 2))
# java
class Solution {
public String addBinary(String a, String b) {
return Integer.toBinaryString(Integer.parseInt(a, 2) + Integer.parseInt(b, 2));
}
}
方法二:如果你选择用c++,那么需要直接实现,这里用另外一种直观的方法,从字符串的末尾开始加,用一个数纪录是否进位,直到全部遍历结束。
代码:
std::string Leecode67_addBinary(std::string a, std::string b) {
int n = a.length(), m= b.length();
if (n < m) return Leecode67_addBinary(b, a);
int L = std::max(n, m);
std::string sb("");
int carry = 0, j = m - 1;
for (int i = L - 1; i > -1; --i) {
if (a[i] == '1') ++carry;
if (j > -1 && b[j--] == '1') ++carry;
if (carry % 2 == 1) sb += "1";
else sb += '0';
carry /= 2;
}
if (carry == 1) sb += "1";
std::reverse(sb.begin(),sb.end());
return sb;
}
因为是从后往前加的,最后的字符加在了字符串的最前面,故最后答案需要反一下。