题目描述:
Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1
or 0
.
Example 1:
Input: a = "11", b = "1" Output: "100"
Example 2:
Input: a = "1010", b = "1011" Output: "10101"
中文理解:给出两个二进制的字符串,计算这个两个二进制数的和,并把结果以字符串的形式返回。
解题思路:解法一:现将字符串转换为十进制,相加后再转换为二进制;解法二(代码给出的解法):从最低位遍历两个字符串,使用carry来表示进位,不断累加,得出结果。思路和两个链表表示的加法运算类似。
代码(java):
class Solution {
public String addBinary(String a, String b) {
StringBuffer res=new StringBuffer();
int carry=0;
int l1=a.length()-1;
int l2=b.length()-1;
while(l1>=0 && l2>=0){
int aTail=Integer.parseInt(String.valueOf(a.charAt(l1)));
int bTail=Integer.parseInt(String.valueOf(b.charAt(l2)));
int add=(aTail+bTail+carry)%2;
res.append(""+add);
carry=(aTail+bTail+carry)/2;
l1--;
l2--;
}
while(l1>=0){
int aTail=Integer.parseInt(String.valueOf(a.charAt(l1)));
int add=(aTail+carry)%2;
res.append(""+add);
carry=(aTail+carry)/2;
l1--;
}
while(l2>=0){
int bTail=Integer.parseInt(String.valueOf(b.charAt(l2)));
int add=(bTail+carry)%2;
res.append(""+add);
carry=(bTail+carry)/2;
l2--;
}
if(carry==1)res.append(""+carry);
return res.reverse().toString();
}
}