Leetcode OJ 67 Add Binary [Easy]
题目描述:
Given two binary strings, returntheir sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
题目理解:
给定另个字符串,字符串是二进制数,返回这两个二进制数的和,返回形式也是二进制字符串。
测试用例:
功能测试:有进位;无进位;
边界测试:两字符串都是null;其中一个字符串是null;
分析:见解答
解答(超时):
class Solution {
public String addBinary(String a, String b) {
int carry = 0;
int p_a = a.length() - 1, p_b = b.length() - 1;
String result = "";
while(p_a >= 0 || p_b >= 0){
int sum = carry;
if(p_a >= 0) sum += a.charAt(p_a--) - '0';
if(p_b >= 0) sum += b.charAt(p_b--) - '0';
result += String.valueOf(sum % 2);
carry = sum / 2;
}
if(carry == 1) result += String.valueOf(carry);
return new StringBuilder(result).reverse().toString();
}
}
解答:
public class Solution {
public String addBinary(String a, String b) {
int carry=0;
String result="";
int i=0;
int alen=a.length();
int blen=b.length();
while(i<alen||i<blen||carry!=0){
int x=(i<alen)?((a.charAt(alen-1-i)=='1')?1:0):0;
int y=(i<blen)?((b.charAt(blen-1-i)=='1')?1:0):0;
result=(x+y+carry)%2+result;
carry=(x+y+carry)/2;
i++;
}
return result;
}
}