Q:
Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
Analysis:
刚开始傻傻的以为Java自带API就可以完成,后来试了确实naive了。
然后正常思路做题吧,找出最长的二进制字符串,较短的前面补0,依次按各个位相加即可。
Code:
public class Solution {
public String addBinary(String a, String b) {
int lengthA = a.length();
int lengthB = b.length();
int maxLength = lengthA > lengthB ? lengthA : lengthB;
int tempA, tempB, c = 0;// 暂存tempA,暂存tempB,进位位c
int value;// 暂存累加值
StringBuffer s = new StringBuffer();
for (int i = 0; i < maxLength; i++) {
tempA = lengthA > i ? a.charAt(lengthA - 1 - i) - '0' : 0;// 判断当前i值是否大于a,b长度
tempB = lengthB > i ? b.charAt(lengthB - 1 - i) - '0' : 0;
value = tempA + tempB + c;// 计算各位累加值
c = value / 2;// 取出进位位
value %= 2;// 取余赋值各位值
s.append(value + "");
}
// 若最高位还有进位,则在最前面再追加1
if (c == 1) {
s.append(c + "");
}
// 反转返回
return s.reverse().toString();
}
}