Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
问题描述:给定两个二进制字符串,返回这两个二进制字符串的和,和也是一个二进制字符串。
分析:循环这两个字符串,每次获得一个字符,转换成String,再转换成Int后相加,设置变量m,记录两数相加的进位。若两数相加再加进位m大于或等于2,则进位m=1,当前位为两数相加再加进位m%2。解题思路和66. Plus One 类似。注意最后相加结果result反转后才是最终结果。
public class Solution {
public String addBinary(String a, String b) {
int m = 0;
String result = "";
int i = a.length() - 1;
int j = b.length() - 1;
int a1;
int b1;
for (; i >= 0 && j >= 0; i--, j--) {
a1 = Integer.parseInt(String.valueOf(a.charAt(i)));
b1 = Integer.parseInt(String.valueOf(b.charAt(j)));
if ((a1 + b1 + m) >= 2) {
result = result + (a1 + b1 + m) % 2;
m = 1;
} else {
result = result + (a1 + b1 + m);
m = 0;
}
}
if (i >= 0) {
for (; i >= 0; i--) {
a1 = Integer.parseInt(String.valueOf(a.charAt(i)));
if (a1 + m == 2) {
result = result + 0;
m = 1;
if (i == 0) {
result += 1;
}
} else {
result = result + (a1 + m);
m = 0;
}
}
} else if (j >= 0) {
for (; j >= 0; j--) {
b1 = Integer.parseInt(String.valueOf(b.charAt(j)));
if (b1 + m == 2) {
result = result + 0;
m = 1;
if (j == 0) {
result += 1;
}
} else {
result = result + (b1 + m);
m = 0;
}
}
} else {
if (m == 1) {
result += 1;
}
}
String newResult = "";
for (int k = result.length() - 1; k >= 0; k--)
newResult += result.charAt(k);
return newResult;
}
}