题目
给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。
输入为 非空 字符串且只包含数字 1 和 0。
示例
-
示例 1:
输入: a = "11", b = "10" 输出: "101"
-
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
提示:
每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
1 <= a.length, b.length <= 104
字符串如果不是 “0” ,就都不含前导零。
程序代码
class Solution {
/**
* 给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。
*
* @param a 二进制格式字符串
* @param b 二进制格式字符串
* @return 相加结果
*/
public String addBinary(String a, String b) {
if (a == null || b == null || a.length() == 0 || b.length() == 0) {
return "0";
}
int lengthOfA = a.length() - 1;
int lengthOfB = b.length() - 1;
int sum = 0;
StringBuilder sb = new StringBuilder();
while (lengthOfA >= 0 && lengthOfB >= 0) {
int numberA = a.charAt(lengthOfA) - '0';
lengthOfA--;
int numberB = b.charAt(lengthOfB) - '0';
lengthOfB--;
int num = numberA + numberB + sum;
sum = num >= 2 ? 1 : 0;
num = num >= 2 ? num - 2 : num;
sb.append(num);
}
while (lengthOfA >= 0) {
int numberA = a.charAt(lengthOfA) - '0';
lengthOfA--;
int num = numberA + sum;
sum = num >= 2 ? 1 : 0;
num = num >= 2 ? num - 2 : num;
sb.append(num);
}
while (lengthOfB >= 0) {
int numberB = b.charAt(lengthOfB) - '0';
lengthOfB--;
int num = numberB + sum;
sum = num >= 2 ? 1 : 0;
num = num >= 2 ? num - 2 : num;
sb.append(num);
}
if (sum > 0) {
sb.append(1);
}
return sb.reverse().toString();
}
}
来源:力扣(LeetCode)