1. 描述
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
2. 示例
示例 1
输入: a = "11", b = "1"
输出: "100"
示例 2
输入: a = "1010", b = "1011"
输出: "10101"
3. 答案
class Solution {
public String addBinary(String a, String b) {
StringBuilder strBuilder = new StringBuilder();
int lenA = a.length();
int lenB = b.length();
int num = Math.max(lenA, lenB);
int carry = 0;
int current = 0;
for (int i = 0; i < num; i++) {
if (i > lenA - 1) {
current = carry + Character.getNumericValue(b.charAt(lenB - i - 1));
} else if (i > lenB - 1) {
current = carry + Character.getNumericValue(a.charAt(lenA - i - 1));
} else {
current = carry + Character.getNumericValue(a.charAt(lenA - i - 1)) + Character.getNumericValue(b.charAt(lenB - i - 1));
}
if (current >= 2) {
carry = 1;
current -= 2;
} else {
carry = 0;
}
strBuilder.insert(0, current);
}
if (carry == 1) {
strBuilder.insert(0, carry);
}
return strBuilder.toString();
}
}
- 标签:字符串
- 主要思想:模拟十进制列竖式加法
- 时间复杂度:O(n)
- 空间复杂度:O(1)
LeetCode:67. 二进制求和