题目描述:
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字
1
1
1 和
0
0
0。
示例1
输入: a = "11", b = "1"
输出: "100"
示例2
输入: a = "1010", b = "1011"
输出: "10101"
解题思路
根据加法法则,我们从后往前遍历相加,注意起始下标位置,如果
a
,
b
a,b
a,b各个位置上两数相加不为
0
0
0或者
i
,
j
i,j
i,j没有遍历到起始位置,只要为
1
1
1就是有效位,记录下来,辗转相除取余数,反向输出即为结果。
java代码
class Solution {
public String addBinary(String a, String b) {
int i=a.length()-1,j=b.length()-1,carry=0;
StringBuilder ans=new StringBuilder();
while(carry==1 || i>=0 || j>=0){
if(i>=0 && a.charAt(i--)=='1')
carry++;
if(j>=0 && b.charAt(j--)=='1')
carry++;
ans.append(carry%2);
carry=carry/2;
}
return ans.reverse().toString();
}
}