求解代码
publicStringaddBinary(Stringa,Stringb){// 如果第一个字符串为空/长度为0,直接返回第二个字符串if(a.length()<=0){returnb;}// 如果第二个字符串为空/长度为0,直接返回第一个字符串if(b.length()<=0){returna;}inti=a.length()-1;intj=b.length()-1;// 定义进位变量tmpinttmp=0;// 定义StringBuilder拼接结果StringBuildersb=newStringBuilder();// 需要注意:最后一位相加仍有进位时,需把进位1也拼接到结果while(i>=0||j>=0||tmp!=0){tmp+=i>=0?a.charAt(i--)-'0':0;tmp+=j>=0?b.charAt(j--)-'0':0;// 取余2:得到当前位的计算结果sb.append(tmp%2);// 除以2:更新进位值tmp=tmp/2;}// 结果逆序:因为是从个位开始拼接,需要反转回正序,再转字符串返回returnsb.reverse().toString();}###小贴士
这道题本质上处理方式和【字节面试手撕】大数加法是一样的。