题目链接
1、思路
类似归并排序,唯一需要注意的就是进位要时刻保存,最后还要根据进位判断需不需要再加一位
2、代码
类似归并版本
class Solution {
public String addBinary(String a, String b) {
int flag = 0, i = a.length() - 1, j = b.length() - 1, addtion;
StringBuilder result = new StringBuilder();
if (-1 == i)
return b;
if (-1 == j)
return a;
while (i >= 0 && j >= 0) {
addtion = a.charAt(i--) + b.charAt(j--) + flag - 2 * '0';
flag = addtion / 2;
addtion %= 2;
result.append(addtion);
}
while (i >= 0) {
addtion = a.charAt(i--) - '0' + flag;
flag = addtion / 2;
addtion %= 2;
result.append(addtion);
}
while (j >= 0) {
addtion = b.charAt(j--) - '0' + flag;
flag = addtion / 2;
addtion %= 2;
result.append(addtion);
}
if (1 == flag)
result.append(flag);
return result.reverse().toString();
}
}
精简后
class Solution {
public String addBinary(String a, String b) {
int flag = 0, i = a.length() - 1, j = b.length() - 1, addtion;
StringBuilder result = new StringBuilder();
if (-1 == i)
return b;
if (-1 == j)
return a;
while (i >= 0 || j >= 0) {
addtion = i >= 0 ? j >= 0 ? a.charAt(i--) + b.charAt(j--) + flag - 2 * '0' : a.charAt(i--) + flag - '0' : b.charAt(j--) + flag - '0';
flag = addtion / 2;
addtion %= 2;
result.append(addtion);
}
if (1 == flag)
result.append(flag);
return result.reverse().toString();
}
}