「力扣」67.二进制求和

44 阅读1分钟

题目描述

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

示例 1:

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

示例 2:

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

提示:

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

题解

class Solution {
    public String addBinary(String a, String b) {
        // 字符串最大索引
        int aIndex = a.length() - 1;
        // 字符串B的最大索引
        int bIndex = b.length() - 1;
        // 如果不进位是0,进位则是1
        int carry = 0;
        StringBuilder sb = new StringBuilder();
        while (aIndex >= 0 || bIndex >= 0) {
            int avi = aIndex < 0 ? 0 : a.charAt(aIndex) - '0';
            int bvi = bIndex < 0 ? 0 : b.charAt(bIndex) - '0';
            carry = carry + avi + bvi;
            sb.append(carry % 2);
            carry = carry / 2;
            aIndex--;
            bIndex--;
        }
        if (carry > 0) {
            sb.append("1");
        }
        return sb.reverse().toString();
    }
}

提交:

提交结果