/**
* @Class AddBinary
* @Description 67. 二进制求和
* 给你两个二进制字符串,返回它们的和(用二进制表示)。
* 输入为 非空 字符串且只包含数字 1 和 0。
* <p>
* 示例 1:
* 输入: a = "11", b = "1"
* 输出: "100"
* <p>
* 示例 2:
* 输入: a = "1010", b = "1011"
* 输出: "10101"
* @Author
* @Date 2020/6/23
**/
public class AddBinary {
}
public static String addBinary(String a, String b) {
if (a == null || a == "") {
return b;
}
if (b == null || b == "") {
return a;
}
StringBuilder c = new StringBuilder("");
boolean flag = false;
int p = a.length() - 1;
int q = b.length() - 1;
int tempA = 0, tempB = 0, tempC = 0;
while (p >= 0 && q >= 0) {
tempA = Integer.valueOf(a.charAt(p) - '0');
tempB = Integer.valueOf(b.charAt(q) - '0');
tempC = tempA + tempB + (flag == true ? 1 : 0);
flag = tempC > 1 ? true : false;
c.append(tempC % 2);
p--;
q--;
}
while (p >= 0) {
tempA = Integer.valueOf(a.charAt(p) - '0');
tempC = tempA + (flag == true ? 1 : 0);
flag = tempC > 1 ? true : false;
c.append(tempC % 2);
p--;
}
while (q >= 0) {
tempB = Integer.valueOf(b.charAt(q) - '0');
tempC = tempB + (flag == true ? 1 : 0);
flag = tempC > 1 ? true : false;
c.append(tempC % 2);
q--;
}
// 最后判断是否需要进位
if (flag) {
c.append("1");
}
return c.reverse().toString();
}
/**
* 解法2:较短的部分用'0'补齐
*/
public static String addBinary(String a, String b) {
StringBuilder ans = new StringBuilder("");
int lenA = a.length();
int lenB = b.length();
int maxlen = Math.max(lenA, lenB);
boolean flag = false;
/* 方式1:
for (int i = maxlen - 1; i >= 0; i--) {
// 字符串a的下标
int indexA = i + lenA - maxlen;
// 字符串b的下标
int indexB = i + lenB - maxlen;
int sum = (indexA >= 0 ? a.charAt(indexA) - '0' : 0)
+ (indexB >= 0 ? b.charAt(indexB) - '0' : 0);
sum += flag == true ? 1 : 0;
ans.append(sum % 2);
flag = sum / 2 > 0 ? true : false;
}
*/
// 方式2:两个指针分别指向字符串,分别移动
for (int i = lenA - 1, j = lenB - 1; i >= 0 || j >= 0; i--, j--) {
int sum = (i >= 0 ? a.charAt(i) - '0' : 0)
+ (j >= 0 ? b.charAt(j) - '0' : 0);
sum += flag == true ? 1 : 0;
ans.append(sum % 2);
flag = sum / 2 > 0 ? true : false;
}
// 最后判断是否需要进位
if (flag) {
ans.append("1");
}
return ans.reverse().toString();
}
// 测试用例
public static void main(String[] args) {
String a = "11", b = "11";
String ans = addBinary(a, b);
System.out.println("demo01 result:" + ans);
a = "1010";
b = "1011";
ans = addBinary(a, b);
System.out.println("demo02 result:" + ans);
a = "1";
b = "111";
ans = addBinary(a, b);
System.out.println("demo03 result:" + ans);
}