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”
坑
- 方法名写错了,LeetCode报代码错误,找了好久才发现。
思路
- 设置carryFlag用来记录进制位。
- 设置sum用来叠加字符。
- 利用’1’-‘0’和’0’-'0’巧妙地将字符变数字。
- 最后反转。
注意
- String是可以叠加的,比如:
String a="";
a = a + "abc";
- 用StringBuilder是因为它自带
reverse
方法。 - String,StringBuilder和StringBuffer的区别
代码
public class Solution {
public String addBinary(String a, String b) {
int i = a.length()-1,j = b.length()-1,carryFlag = 0;
StringBuilder c= new StringBuilder();
while(i >= 0 || j >= 0 || carryFlag ==1){
int sum = carryFlag;
if(i>=0) sum += a.charAt(i--) - '0';
if(j>=0) sum += b.charAt(j--)- '0';
carryFlag = sum / 2;
c.append(sum % 2);
}
return c.reverse().toString();
}
}