题目描述
给出两个用字符串表示的二进制数,返回他们的和(也用字符串表示)
例如:
a ="11"
b ="1"
返回"100".
Given two binary strings, return their sum (also a binary string).
For example,
a ="11"
b ="1"
Return"100".
思路:按照二进制加法规则,从两个二进制数字末尾对应位置开始相加,相加结果每等于2则进一位。
public class Solution {
public String addBinary(String a, String b) {
int i = a.length() - 1;
int j = b.length() - 1;
StringBuilder res = new StringBuilder();
//进位标志
int carry = 0;
while(i >= 0 || j >= 0 || carry != 0){
//从末尾对应位置上取数字,相加
if(i >= 0){
carry += a.charAt(i--) - '0';
}
//从末尾对应位置上取数字,相加
if(j >= 0){
carry += b.charAt(j--) - '0';
}
//取2的余数,得到对应位置上的结果
res.append(carry % 2);
//将当前位置的carry转变为对下个位置的进位数,按照相加结果每等于2则进一位的转变规则,得到进位数
carry = carry / 2;
}
//由于得到的结果是倒序的,需要反转结果
return res.reverse().toString();
}
}