나의 풀이
import Foundation
extension String {
func isDigit() -> Bool {
var i = self.startIndex
for s in self {
if s.isNumber == false {
break
}
i = self.index(after: i)
}
return i == self.endIndex
}
}
class Solution {
func eval(_ left: Int, _ right: Int, _ op: Character) -> Int {
switch op {
case "*":
return left * right
case "-":
return left - right
case "+":
return left + right
default:
return fatalError()
}
}
func compute(_ left: [Int], _ right: [Int], _ op: Character) -> [Int] {
var result: [Int] = []
for l in left {
for r in right {
result.append(eval(l, r, op))
}
}
return result
}
func diffWaysToCompute(_ expression: String) -> [Int] {
var left: [Int] = []
var right: [Int] = []
var results: [Int] = []
var i = expression.startIndex
if expression.isDigit() {
return [Int(expression)!]
}
expression.forEach { v in
if v == "*" || v == "-" || v == "+" {
left = diffWaysToCompute(String(expression[expression.startIndex..<i]))
right = diffWaysToCompute(String(expression[expression.index(after: i)..<expression.endIndex]))
results.append(contentsOf: compute(left, right, v))
}
i = expression.index(after: i)
}
return results
}
}
회고
- String 타입이 python과 다르게 index와 substr을 관리하는 것이 어려웠다.
- 리트코드의 다른 풀이를 참고하니 대부분
Array
로 변환해서 풀이하는 것 확인