forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.swift
38 lines (36 loc) · 1023 Bytes
/
Solution.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Solution {
func calculate(_ s: String) -> Int {
let n = s.count
var x = 0
var sign: Character = "+"
var stk = [Int]()
let sArray = Array(s)
for i in 0..<n {
let c = sArray[i]
if c.isNumber {
x = x * 10 + Int(String(c))!
}
if i == n - 1 || (!c.isNumber && c != " ") {
switch sign {
case "+":
stk.append(x)
case "-":
stk.append(-x)
case "*":
if let last = stk.popLast() {
stk.append(last * x)
}
case "/":
if let last = stk.popLast() {
stk.append(last / x)
}
default:
break
}
x = 0
sign = c
}
}
return stk.reduce(0, +)
}
}