Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  1. class Solution {
  2. func addBinary(_ a: String, _ b: String) -> String {
  3. let zeroChar: Character = "0"
  4. let oneChar: Character = "1"
  5. let aReversed = String(a.reversed())
  6. let bReversed = String(b.reversed())
  7.  
  8. let bigger: String
  9. let smaller: String
  10. if a.count > b.count {
  11. bigger = aReversed
  12. smaller = bReversed
  13. }
  14. else {
  15. bigger = bReversed
  16. smaller = aReversed
  17. }
  18.  
  19. let finalIndex = bigger.count - 1
  20.  
  21. var outputChars = [Character]()
  22. var digitsToCarry = 0
  23. for i in 0...finalIndex {
  24. let stringIndex = bigger.index(bigger.startIndex, offsetBy: i)
  25. let char1 = bigger[stringIndex]
  26.  
  27. let char2: Character
  28. if i < smaller.count {
  29. char2 = smaller[stringIndex]
  30. }
  31. else if digitsToCarry > 0 {
  32. char2 = oneChar
  33. digitsToCarry -= 1
  34. }
  35. else {
  36. char2 = zeroChar
  37. }
  38.  
  39. var digit = 0
  40. digit += (char1 == zeroChar) ? 0 : 1
  41. digit += (char2 == zeroChar) ? 0 : 1
  42. if digitsToCarry > 0 {
  43. digit += 1
  44. digitsToCarry -= 1
  45. }
  46.  
  47. if digit == 0 {
  48. outputChars.append(zeroChar)
  49. }
  50. else if digit == 1 {
  51. outputChars.append(oneChar)
  52. }
  53. else {
  54. let char = (digit % 2 == 0) ? zeroChar : oneChar
  55. outputChars.append(char)
  56. digitsToCarry += 1
  57. }
  58. }
  59.  
  60. while digitsToCarry > 0 {
  61. outputChars.append(oneChar)
  62. digitsToCarry -= 1
  63. }
  64.  
  65. return String(outputChars.reversed())
  66. }
  67. }
  68.  
  69. /*
  70. Leetcode results:
  71. -----------------------------------------------------------------------------------
  72. Runtime: 20 ms, faster than 41.96% of Swift online submissions for Add Binary.
  73. Memory Usage: 21.4 MB, less than 16.67% of Swift online submissions for Add Binary.
  74. -----------------------------------------------------------------------------------
  75. */
  76.  
  77.  
  78. ///* SOLUTION ANALYSIS: */
  79. //let solution = Solution()
  80. //struct Problem {
  81. // let input: (String, String)
  82. // let expectedAnswer: String
  83. //}
  84. //let problems: [Problem] = [
  85. // Problem(input: ("11","1"), expectedAnswer: "100"),
  86. // Problem(input: ("1010","101"), expectedAnswer: "1111"),
  87. // Problem(input: ("11111","1"), expectedAnswer: "100000"),
  88. // Problem(input: ("1010","1011"), expectedAnswer: "10101"),
  89. // Problem(input: ("1011","101"), expectedAnswer: "10000"),
  90. // Problem(input: ("1111", "1111"), expectedAnswer: "11110")
  91. //]
  92. //
  93. //let answers = problems.map { (problem) -> String in
  94. // let answer = solution.addBinary(problem.input.0, problem.input.1)
  95. // let gotIt = (answer == problem.expectedAnswer) ? "CORRECT" : "WRONG"
  96. // return "\(gotIt)! Input: \(problem.input), Expected: \(problem.expectedAnswer), Got: \(answer)."
  97. //}
  98. //
  99. //let joinedAnswers = answers.joined(separator: "\n")
  100. //print(joinedAnswers)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement