67. Add Binary

108 阅读1分钟

题目描述

Given two binary strings, return their sum (also a binary string). The input strings are both non-empty and contains only characters 1 or 0.

Example 1:
Input: a = "11", b = "1"
Output: "100"

Example 2:
Input: a = "1010", b = "1011"
Output: "10101"

解题思路: 转数组法

这个题目的思路与上一题类似, 我们将2个字符串转为数组,然后从后往前遍历,将每个数位的数字和上次计算出的进位值相加, 获得结果存入新的数组,并且将需要进位的值记录下来, 循环结束后如果还需要进位, 就额外添加一个数位
时间复杂度: O(n)

示例代码

func addBinary(_ a: String, _ b: String) -> String {
    if a.count < b.count {
        return addBinary(b, a)
    }

    let long = Array(a)
    let short = Array(b)

    var result: [String] = []
    var quotient = 0
    for i in 0..<long.count {
        let indexL = long.count - 1 - i
        let numL = Int(String(long[indexL])) ?? 0

        var numS = 0
        if i < short.count {
            let indexS = short.count - i - 1
            numS = Int(String(short[indexS])) ?? 0
        }
        let resultItem = (numL + numS + quotient) % 2
        result.insert("\(resultItem)", at: 0)
        quotient = (numL + numS + quotient) / 2
    }
    if quotient == 1 {
        result.insert("1", at: 0)
    }

    return result.joined(separator: "")
}