题目
给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “10”
输出: “101”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
提示:
每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 “0”,就都不含前导零。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/JFETK5
一、解题及代码
模拟运算:
初始化carry=0记录是否有进位
代码如下:
public String addBinary(String a, String b) {
StringBuilder res = new StringBuilder();
//从末位开始计算,所以最后需要反转res
int i = a.length()-1;
int j = b.length()-1;
int carry = 0 ;
while(i>=0||j>=0){
int digit1 = i>=0 ? a.charAt(i--)-'0' : 0;
int digit2 = j>=0 ? b.charAt(j--)-'0' : 0;
int sum = digit1 + digit2 +carry;
carry = sum>=2 ? 1:0;
sum = sum>=2 ? sum-2:sum;
res.append(sum);
}
if(carry==1) res.append(1);
return res.reverse().toString();
}
侵删