給定兩個二進制字符串,返回他們的和(用二進制表示)。
比較蠢的辦法
public class Solution {
public String addBinary(String a, String b) {
//分別用 max min 指向長度最長 最短字符串
String max, min;
if(a.length() > b.length()) {
max = a;
min = b;
} else {
max = b;
min = a;
}
//逐位計算,用 StringBuilder 來保存
StringBuilder sum = new StringBuilder("");
//進位標誌
int carry = 0;
//先進行短字符串長度部分的位運算
for(int i = 1; i < min.length() + 1; i++) {
//每次循環取出兩個字符串的同一位
char ai = a.charAt(a.length() - i);
char bi = b.charAt(b.length() - i);
//分別判斷各位情況,注意進位
if(ai == '0' && bi == '0') {
sum.insert(0, carry);
carry = 0;
} else if(ai != bi) {
if(carry == 0) sum.insert(0, 1);
else sum.insert(0, 0);
} else if(ai == '1' && bi == '1') {
if(carry == 0) sum.insert(0, 0);
else sum.insert(0, 1);
carry = 1;
}
}
//短字符串長度部分比較完後,再單獨計算長字符串多出來的部分
for(int i = max.length() - min.length() - 1; i >= 0; i--) {
if(carry == 1) {
if(max.charAt(i) == '1') {
sum.insert(0, 0);
carry = 1;
} else {
sum.insert(0, 1);
carry = 0;
}
} else {
sum.insert(0, max.substring(0, i+1));
break;
}
}
//最後,對於最高位有進位的情況補1
if(carry == 1) sum.insert(0, 1);
return sum.toString();
}
}