-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolution.py
31 lines (27 loc) · 954 Bytes
/
solution.py
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
class Solution:
def calculate(self, s: str) -> int:
# sample
# 5 - 2 + 3*3 - 5/2
# output result = 5 + (-2) + (3*3) + (-5/2)
# stack = [5, -2, 9, -2]
# output result = sum(stack)
if not s:
return '0' # type: ignore
num, sign, stack = 0, '+', []
for i, c in enumerate(s):
if c.isdigit():
num = 10 * num + int(c)
if (not c.isdigit() and not c.isspace()) or i == len(s)-1:
if sign == '+':
stack.append(num)
elif sign == '-':
stack.append(-num)
elif sign == '*':
stack.append(stack.pop()*num)
elif sign == '/':
stack.append(int(stack.pop()/num))
num, sign = 0, c
return sum(stack)
if __name__ == '__main__':
s = '5-2+3*3-5/2'
print(Solution().calculate(s))