题目描述:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入:a = “11” b=”1″
输出:”100″
示例 2:
输入:a = “1010” b=”1011″
输出:”10101″
思路:
根据二进制的相加规则,当前位相加再%2则为结果,进位则/2。
可以先建立一个StringBuilder类型的result,从后往前,将每一位相加,结果加入result,最后反转输出。
代码:
class Solution {
public String addBinary(String a, String b) {
StringBuilder result = new StringBuilder();
int al = a.length()-1;
int bl = b.length()-1;
int carry = 0;
while( al >=0 || bl >=0 )
{
int sum = carry;
if(al >= 0)
{
sum += (a.charAt(al) - '0');
al--;
}
if(bl >= 0)
{
sum += (b.charAt(bl) - '0');
bl--;
}
result.append(sum%2); //相加结果
carry = sum /2; //进位,如果是1那么carry=0,如果是2则要进位给下面一位+1
}
if(carry !=0 ) //都相加完了,还要进位的情况
result.append(1);
return result.reverse().toString(); //先反转,再输出
}
}