Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- func addBinary(_ a: String, _ b: String) -> String {
- let zeroChar: Character = "0"
- let oneChar: Character = "1"
- let aReversed = String(a.reversed())
- let bReversed = String(b.reversed())
- let bigger: String
- let smaller: String
- if a.count > b.count {
- bigger = aReversed
- smaller = bReversed
- }
- else {
- bigger = bReversed
- smaller = aReversed
- }
- let finalIndex = bigger.count - 1
- var outputChars = [Character]()
- var digitsToCarry = 0
- for i in 0...finalIndex {
- let stringIndex = bigger.index(bigger.startIndex, offsetBy: i)
- let char1 = bigger[stringIndex]
- let char2: Character
- if i < smaller.count {
- char2 = smaller[stringIndex]
- }
- else if digitsToCarry > 0 {
- char2 = oneChar
- digitsToCarry -= 1
- }
- else {
- char2 = zeroChar
- }
- var digit = 0
- digit += (char1 == zeroChar) ? 0 : 1
- digit += (char2 == zeroChar) ? 0 : 1
- if digitsToCarry > 0 {
- digit += 1
- digitsToCarry -= 1
- }
- if digit == 0 {
- outputChars.append(zeroChar)
- }
- else if digit == 1 {
- outputChars.append(oneChar)
- }
- else {
- let char = (digit % 2 == 0) ? zeroChar : oneChar
- outputChars.append(char)
- digitsToCarry += 1
- }
- }
- while digitsToCarry > 0 {
- outputChars.append(oneChar)
- digitsToCarry -= 1
- }
- return String(outputChars.reversed())
- }
- }
- /*
- Leetcode results:
- -----------------------------------------------------------------------------------
- Runtime: 20 ms, faster than 41.96% of Swift online submissions for Add Binary.
- Memory Usage: 21.4 MB, less than 16.67% of Swift online submissions for Add Binary.
- -----------------------------------------------------------------------------------
- */
- ///* SOLUTION ANALYSIS: */
- //let solution = Solution()
- //struct Problem {
- // let input: (String, String)
- // let expectedAnswer: String
- //}
- //let problems: [Problem] = [
- // Problem(input: ("11","1"), expectedAnswer: "100"),
- // Problem(input: ("1010","101"), expectedAnswer: "1111"),
- // Problem(input: ("11111","1"), expectedAnswer: "100000"),
- // Problem(input: ("1010","1011"), expectedAnswer: "10101"),
- // Problem(input: ("1011","101"), expectedAnswer: "10000"),
- // Problem(input: ("1111", "1111"), expectedAnswer: "11110")
- //]
- //
- //let answers = problems.map { (problem) -> String in
- // let answer = solution.addBinary(problem.input.0, problem.input.1)
- // let gotIt = (answer == problem.expectedAnswer) ? "CORRECT" : "WRONG"
- // return "\(gotIt)! Input: \(problem.input), Expected: \(problem.expectedAnswer), Got: \(answer)."
- //}
- //
- //let joinedAnswers = answers.joined(separator: "\n")
- //print(joinedAnswers)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement