最朴素的思想
先转化成十进制数,再相加,最后再用toBinaryString方法返回
但是这处理不了int溢出的情况
class Solution {
public String addBinary(String a, String b) {
return Integer.toBinaryString(
Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
);
}
}
解题思路
列竖式逢二进一思想。只不过为了方便处理最后最高位的进位,我们采用先加低位存到要返回的字符串的高位最后逆转的方式,比如100+100 先加最后的0得到0,再加倒数第二位得到00,再加第三位得到000,最后有进位添上1,得到字符串0001 再逆转为1000。
解题代码
class Solution{
public String addBinary(String a,String b){//列竖式逢二进一思想
StringBuilder ans = new StringBuilder();
int carry = 0;//从低位开始(注意低位在字符串末尾)存到高位最后反转,方便最后的进位 carry是存储每一位的进位
for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--, j--) {
int sum = carry;//sum是从低位开始相加的每一位的加法 初始带有上一次加法的进位
sum += i >= 0 ? a.charAt(i) - '0' : 0;
sum += j >= 0 ? b.charAt(j) - '0' : 0;
ans.append(sum % 2);
carry = sum / 2;//存储本位相加是否有进位
}
ans.append(carry == 1 ? carry : "");//最后的进位存到最后一位
return ans.reverse().toString();//字符串逆转
}
}