67. Add Binary
先翻转再算,最后再翻转。
其实没必要,翻转了是从0开始比较方便。。
直接做也完全可以……
然后其实也不用判定谁长谁短,LOOP里面加判定,超过的直接+0就可以了。。
Time: O(n)
Space: O(1)
public class Solution {
public String addBinary(String a, String b) {
if (a.length() == 0 || b.length() == 0) return a.length() == 0 ? b : a;
if (a.length() > b.length()) {
String temp = a;
a = b;
b = temp;
}
StringBuilder s1 = new StringBuilder(a);
a = s1.reverse().toString();
StringBuilder s2 = new StringBuilder(b);
b = s2.reverse().toString();
int c = 0;
StringBuilder res = new StringBuilder();
for (int i = 0; i < a.length(); i++) {
int total = c + a.charAt(i) + b.charAt(i) - '0' - '0';
if (total >= 2) {
c = 1;
total %= 2;
} else {
c = 0;
}
res.append(total);
}
for (int i = a.length(); i < b.length(); i++) {
int total = c + b.charAt(i) - '0';
if (total >= 2) {
c = 1;
total %= 2;
} else {
c = 0;
}
res.append(total);
}
if (c == 1) res.append(1);
return res.reverse().toString();
}
}
三刷。
自己以前写的也太丑陋了。
public class Solution {
public String addBinary(String a, String b) {
if (a.length() == 0 || b.length() == 0) return a.length() == 0? b:a;
StringBuilder res = new StringBuilder();
int carry = 0;
int l1 = a.length() - 1;
int l2 = b.length() - 1;
while (l1 >= 0 || l2 >= 0 || carry > 0) {
int first = (l1 < 0)? 0:a.charAt(l1--) - '0';
int second = (l2 < 0)? 0:b.charAt(l2--) - '0';
res.append((first + second + carry) % 2);
carry = (first + second + carry) / 2;
}
return res.reverse().toString();
}
}