题目描述
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
思路
从字符串最右边开始,对每一位的和取余,添加进新的字符串中,同时记录进位情况,将进位加到前一位和中。
遍历到字符串最左边后,若进位为1,则将其添加到新字符串中,然后将字符串反转。
注意事项
计算和的时候不能直接加上charAt获取的字符,应该加上其与’0’的差。
代码
public class AddingBinary {
public String addBinary(String a, String b) {
int sum = 0;
int carry = 0;
StringBuilder s = new StringBuilder();
for(int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--)
{
sum = carry;
if(i >= 0)
sum += a.charAt(i) - '0';
if(j >= 0)
sum += b.charAt(j) - '0';
carry = sum / 2;
s.append(sum % 2);
}
if(carry == 1)
{
s.append(carry);
}
return s.reverse().toString();
}
}