给定两个二进制字符串,返回他们的和(用二进制表示)。
比较蠢的办法
public class Solution { public String addBinary(String a, String b) { //分别用 max min 指向长度最长 最短字符串 String max, min; if(a.length() > b.length()) { max = a; min = b; } else { max = b; min = a; } //逐位计算,用 StringBuilder 来保存 StringBuilder sum = new StringBuilder(""); //进位标志 int carry = 0; //先进行短字符串长度部分的位运算 for(int i = 1; i < min.length() + 1; i++) { //每次循环取出两个字符串的同一位 char ai = a.charAt(a.length() - i); char bi = b.charAt(b.length() - i); //分别判断各位情况,注意进位 if(ai == '0' && bi == '0') { sum.insert(0, carry); carry = 0; } else if(ai != bi) { if(carry == 0) sum.insert(0, 1); else sum.insert(0, 0); } else if(ai == '1' && bi == '1') { if(carry == 0) sum.insert(0, 0); else sum.insert(0, 1); carry = 1; } } //短字符串长度部分比较完后,再单独计算长字符串多出来的部分 for(int i = max.length() - min.length() - 1; i >= 0; i--) { if(carry == 1) { if(max.charAt(i) == '1') { sum.insert(0, 0); carry = 1; } else { sum.insert(0, 1); carry = 0; } } else { sum.insert(0, max.substring(0, i+1)); break; } } //最后,对于最高位有进位的情况补1 if(carry == 1) sum.insert(0, 1); return sum.toString(); } }