方法一:
思路:
(1)先求a、b长度的较大值len。
(2)在a和b中较短的字符串前面补齐0。
(3)用flag记录每一位的进位,result记录求和结果。
(4)从后往前遍历a和b,让相应位相加并加上flag,若和temp不小于2,则flag置为1,将temp对2取余后加到result前面,否则flag置为0,将temp直接加到result前面。
(5)若最左边一位相加还有进位,则在result前面再补一个1。
public class Solution {
public String addBinary(String a, String b) {
int lenA = a.length();
int lenB = b.length();
int len = Math.max(lenA, lenB);
if (lenA < lenB) {
for (int i = 0; i < len - lenA; i++)
a = 0 + a;
}
else if (lenA > lenB) {
for (int i = 0; i < len - lenB; i++)
b = 0 + b;
}
String result = "";
int flag = 0;
for (int i = len - 1; i >= 0; i--) {
int temp = (a.charAt(i) - '0') + (b.charAt(i) - '0') + flag;
if (temp >= 2) {
result = temp % 2 + result;
flag = 1;
}
else {
result = temp + result;
flag = 0;
}
}
if (flag == 1)
result = 1 + result;
return result;
}
}
Runtime:7ms
方法二:
思路:
(1)在a和b中较短的字符串前面补齐0。
(2)从右边开始逐位取出a和b 的字符值numsA和numsB,如果长度不足,则用0替代。
(3)用flag记录每一位的进位,result记录求和结果。
(4)相应位相加并加上flag,对2取余后加到result前面。若和不小于2,则flag置为1,否则flag置为0。
(5)若最左边一位相加还有进位,则在result前面再补一个1。
public class Solution {
public String addBinary(String a, String b) {
int lenA = a.length();
int lenB = b.length();
int len = Math.max(lenA, lenB);
int flag = 0;
String result = "";
for (int i = len - 1; i >= 0; i--) {
int numsA = i >= len - lenA ? a.charAt(i - len + lenA) - '0' : 0;
int numsB = i >= len - lenB ? b.charAt(i - len + lenB) - '0' : 0;
result = (numsA + numsB + flag) % 2 + result;
flag = numsA + numsB + flag >= 2 ? 1 : 0;
}
if (flag == 1)
result = 1 + result;
return result;
}
}
Runtime:6ms