Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
大意就是做二进制加法
不能简单的使用Integer.parseInt(s,2)来计算10进制相加在转换为2进制,因为给出的二进制字符串转换成10进制之后可能出现大小超过Integer可以表示的范围的情况。
public String addBinary(String a, String b) {
if(a == null || a.isEmpty()){
return b;
}
if(b == null | b.isEmpty()){
return a;
}
char[] a_array = a.toCharArray();
char[] b_array = b.toCharArray();
/**
* 两个字符数组,都从最后一位开始做位异或(相同即为0,不同即为1)可以计算出当前位置的字符
* 是否进位通过当前两个数组的元素+上一轮计算的进位结果比较
*/
int a_index = a_array.length - 1;
int b_index = b_array.length - 1;
StringBuilder sb = new StringBuilder("");
/**
* 表示是否进位
*/
boolean carry = false;
while(a_index >= 0 || b_index >= 0 || carry){
int a_element = a_index >= 0 ? Character.getNumericValue(a_array[a_index--]) : 0;
int b_element = b_index >= 0 ? Character.getNumericValue(b_array[b_index--]) : 0;
sb.append(a_element ^ b_element ^ (carry ? 1 : 0));
carry = a_element + b_element + (carry ? 1 : 0)> 1 ;
}
return sb.reverse().toString();
}