Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
二进制算法,加上对字符串的处理。
public String addBinary(String a, String b) {
if ((a.length() == 0 || a.isEmpty())
&& (b.length() == 0 || b.isEmpty()))
return null;
if (a.length() == 0 || a.isEmpty())
return b;
if (b.length() == 0 || b.isEmpty())
return a;
int i = a.length() - 1, j = b.length() - 1, sum, m = 0;
int[] temp = new int[Math.max(a.length(), b.length()) + 1];
int k = temp.length;
while (i >= 0 && j >= 0) {
sum = a.charAt(i) - '0' + b.charAt(j) - '0' + m;
temp[--k] = sum % 2;
m = sum / 2;
i--;
j--;
}
while (i >= 0) {
sum = a.charAt(i) - '0' + m;
temp[--k] = sum % 2;
m = sum / 2;
i--;
}
while (j >= 0) {
sum = b.charAt(j) - '0' + m;
temp[--k] = sum % 2;
m = sum / 2;
j--;
}
if (m == 1)
temp[0] = 1;
String str = "";
for (int l = 0; l < temp.length; l++) {
if (l == 0 && temp[l] == 0)
continue;
str = str.concat(Integer.toBinaryString(temp[l]));
}
return str;
}
看了一下专业人士写的,跟我差不太多,还是有一点可以借鉴。如果没必要保持原有的字符串啥的,我们可以对不知道大小的情况先进行排序,就知道哪个遍历先完了。而且字符串实现了+号的重载,没必要用concat方法的其实,直接用加号就行。
public String addBinary(String a, String b) {
if(a.length() < b.length()){
String tmp = a;
a = b;
b = tmp;
}
int pa = a.length()-1;
int pb = b.length()-1;
int carries = 0;
String rst = "";
while(pb >= 0){
int sum = (int)(a.charAt(pa) - '0') + (int)(b.charAt(pb) - '0') + carries;
rst = String.valueOf(sum % 2) + rst;
carries = sum / 2;
pa --;
pb --;
}
while(pa >= 0){
int sum = (int)(a.charAt(pa) - '0') + carries;
rst = String.valueOf(sum % 2) + rst;
carries = sum / 2;
pa --;
}
if (carries == 1)
rst = "1" + rst;
return rst;
}