LeetCode67. 二进制求和

283 阅读1分钟

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 10

示例 1:

输入: a = "11", b = "1"输出: "100"

示例 2:

输入: a = "1010", b = "1011"输出: "10101"

将两个字符串较短的用 00 补齐,使得两个字符串长度一致,然后从末尾进行遍历计算,得到最终结果。

本题解中大致思路与上述一致,但由于字符串操作原因,不确定最后的结果是否会多出一位进位,所以会有 2 种处理方式:

第一种,在进行计算时直接拼接字符串,会得到一个反向字符,需要最后再进行翻转
第二种,按照位置给结果字符赋值,最后如果有进位,则在前方进行字符串拼接添加进位
时间复杂度:O(n)

/** * 输入: a = "11", b = "1" * 输出: "100" * @param a * @param b * @return */public static String addBinary(String a, String b) {    StringBuilder sb = new StringBuilder();    int ca = 0;    for(int i=a.length()-1, j=b.length()-1; i>=0||j>=0; i--,j--){        int sum = ca;        sum += i>=0 ? a.charAt(i)-'0' : 0;        sum += j>=0 ? b.charAt(j)-'0' : 0;        if(sum%2 >= 0){            ca = sum / 2;            sb.append(sum%2);        }    }    sb.append(ca==1 ? "1" : "");    return sb.reverse().toString();}