剑指 Offer II 002. 二进制加法
难度简单49收藏分享切换为英文接收动态反馈
给定两个 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"
,就都不含前导零。
题解:
public class Solution {
public String addBinary(String a, String b) {
//调用Stringbuilder 的reserse()方法
StringBuilder result=new StringBuilder();
int i=a.length()-1;
int j=b.length()-1;
int carry=0;
while(i>=0 || j>=0){
//当只有一个i或j走完后的情况
int digitA=i>=0?a.charAt(i--)-'0':0;
int digitB=j>=0?b.charAt(j--)-'0':0;
int sum=digitA+digitB+carry;
carry=sum>=2?1:0;
sum=sum>=2?sum-2:sum;
result.append(sum);
}
if(carry==1){
result.append(1);
}
return result.reverse().toString();
}
}