【算法】【字符串】二进制求和

1  题目

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

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

示例 2:

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

提示:

  • 1 <= a.length, b.length <= 104
  • a 和 b 仅由字符 '0' 或 '1' 组成
  • 字符串如果不是 "0" ,就不含前导零

2  解答

今儿脑子有点不在线,有点迷:

class Solution {
    public String addBinary(String a, String b) {
        // 1 <= a.length, b.length <= 10 不需要校验参数为空
        // 定义返回结果
        StringBuilder res = new StringBuilder();
        // 进位
        int flag = '0';
        int two = 2 * '1' + '0';
        int three = 3 * '0';
        int aLen = a.length();
        int bLen = b.length();
        int aIndex = aLen - 1;
        int bIndex = bLen - 1;

        while (aIndex >= 0 || bIndex >= 0) {
            int aNum = aIndex >= 0 ? a.charAt(aIndex) : '0';
            int bNum = bIndex >= 0 ? b.charAt(bIndex) : '0';
            int sum = aNum + bNum + flag;
            if (sum >= two) {
                flag = '1';
                res.insert(0, sum - two);
            } else {
                flag = '0';
                res.insert(0, sum - three);
            }
            aIndex--;
            bIndex--;
        }
        if (flag == '1') {
            res.insert(0, 1);
        }
        return res.toString();
    }
}

加油。

posted @ 2024-01-23 07:12  酷酷-  阅读(29)  评论(0编辑  收藏  举报