LeetCode-67. 二进制求和

85 阅读1分钟

1. 描述

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

输入为 非空 字符串且只包含数字 1 和 0。

2. 示例

示例 1

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

示例 2

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

3. 答案

class Solution {
    public String addBinary(String a, String b) {
        StringBuilder strBuilder = new StringBuilder();
        int lenA = a.length();
        int lenB = b.length();
        int num = Math.max(lenA, lenB);
        int carry = 0;
        int current = 0;
        for (int i = 0; i < num; i++) {
            if (i > lenA - 1) {
                current = carry + Character.getNumericValue(b.charAt(lenB - i - 1));
            } else if (i > lenB - 1) {
                current = carry + Character.getNumericValue(a.charAt(lenA - i - 1));
            } else {
                current = carry + Character.getNumericValue(a.charAt(lenA - i - 1)) + Character.getNumericValue(b.charAt(lenB - i - 1));
            }
            if (current >= 2) {
                carry = 1;
                current -= 2;
            } else {
                carry = 0;
            }
            strBuilder.insert(0, current);
        }
        if (carry == 1) {
            strBuilder.insert(0, carry);
        }
        return strBuilder.toString();

    }
}
  • 标签:字符串
  • 主要思想:模拟十进制列竖式加法
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

LeetCode:67. 二进制求和