思路:
二进制加法用手算,然后用代码实现。
手算的时候,逢 2 进 1 。
用代码实现的时候,一开始会想到将长短不一的字符串对齐。 其实没必要。
找到字符串的长度,长度减 1 。 就是这个字符串的末尾, 然后从末尾开始相加。逢 2 进 1。 相加并不仅仅是两个字符相加,还有进位的相加。
进位 : 进位用一个变量表示。
每次的和用一个变量表示。
把每次的和放进 StringBuilder 变量里面。 最后反转 转化成 String 。 就是答案。
class Solution { public String addBinary(String a, String b) { char []a1 = a.toCharArray(); char []b1 = b.toCharArray(); int i = a1.length-1; int j = b1.length-1; int carry = 0; StringBuilder ans = new StringBuilder(); while(i >= 0 || j >= 0 || carry != 0) { // System.out.println("i:" + i + " j:" + j +" a[i]: " + a1[i] + " b[j]: " + b1[j]); int aa = i >=0 ? a1[i--] - '0': 0; int bb = j >=0 ? b1[j--] - '0': 0; int sum = (aa + bb + carry)%2; carry = (aa + bb + carry)/2; // System.out.println("aa: " + aa + " bb:" + bb + " sum:" + sum + " carry:" + carry); ans.append(sum); } String ansStr = ans.reverse().toString(); return ansStr; } }