原题链接在这里: https://leetcode.com/problems/add-binary/
这道题与Plus One相似。都是维护一个currentDigit(%) 和一个carryDigit(/).
Time O(max(m,n)), Space O(max(m,n)), m = a.length(), n = b.length()
Note: 1. 注意是从String的尾部算起,所以注意i 和index的关系;
2. 若是算到最后,carryDigit还是1的话就是有一个最后的进位,要在res的首位加起来。
AC Java:
public class Solution {
public String addBinary(String a, String b) {
if(a==null && b==null && a.length()==0 && b.length()==0){
return "";
}
int len1 = a.length();
int len2 = b.length();
StringBuilder res = new StringBuilder();
int carryDigit = 0;
int currentDigit;
int i = 0;
while(i<len1 && i<len2){
currentDigit = (Character.getNumericValue(a.charAt(len1-1-i)) + Character.getNumericValue(b.charAt(len2-1-i)) + carryDigit)%2;
carryDigit = (Character.getNumericValue(a.charAt(len1-1-i)) + Character.getNumericValue(b.charAt(len2-1-i)) + carryDigit)/2;
if(currentDigit == 0){
res.insert(0,"0");
}else{
res.insert(0,"1");
}
i++;
}
if(len1 > len2){
while(i<len1){
currentDigit = (Character.getNumericValue(a.charAt(len1-1-i)) + carryDigit)%2;
carryDigit = (Character.getNumericValue(a.charAt(len1-1-i)) + carryDigit)/2;
if(currentDigit == 0){
res.insert(0,"0");
}else{
res.insert(0,"1");
}
i++;
}
}
if(len1 < len2){
while(i<len2){
currentDigit = (Character.getNumericValue(b.charAt(len2-1-i)) + carryDigit)%2;
carryDigit = (Character.getNumericValue(b.charAt(len2-1-i)) + carryDigit)/2;
if(currentDigit == 0){
res.insert(0,"0");
}else{
res.insert(0,"1");
}
i++;
}
}
if(carryDigit != 0){
res.insert(0,"1");
}
return res.toString();
}
}