题目描述
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: "")
}