一、问题描述
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
二、问题分析
把两个字符串用‘0’补充为相同长度后,从高位到低位模拟二进制真实运算,最后把结果反转后返回。
三、算法代码
public class Solution {
public String addBinary(String a, String b) {
int len = Math.max(a.length(), b.length());
//把两个字符串用‘0’补充为一样长
if(a.length() < len){
StringBuffer tmp = new StringBuffer();
for(int i = 0; i < len - a.length(); i++){
tmp.append('0');
}
a = tmp.append(a).toString();
}
if(b.length() < len){
StringBuffer tmp = new StringBuffer();
for(int i = 0; i < len - b.length(); i++){
tmp.append('0');
}
b = tmp.append(b).toString();
}
StringBuffer result = new StringBuffer();
int valueOne = 0;
int valueTwo = 0;
int carry = 0;
for(int i = len - 1; i >= 0; i--){//模拟真实的二进制运算,需要从高位到低位开始
valueOne = Integer.parseInt(String.valueOf(a.charAt(i)));
valueTwo = Integer.parseInt(String.valueOf(b.charAt(i)));
result.append((valueOne + valueTwo + carry) % 2);
carry = (valueOne + valueTwo + carry) / 2;
}
if(carry == 1){
result.append(carry);
}
return result.reverse().toString();//需要reverse以下
}
}