File tree 1 file changed +32
-25
lines changed
1 file changed +32
-25
lines changed Original file line number Diff line number Diff line change @@ -26,29 +26,36 @@ def calculate(self, s):
26
26
:type s: str
27
27
:rtype: int
28
28
"""
29
-
30
- res = 0
31
- signs = [1 , 1 ]
32
- i = 0
33
- while i < len (s ):
34
- if s [i ].isdigit ():
35
- start = i
36
- i += 1
37
- while i < len (s ) and s [i ].isdigit ():
38
- i += 1
39
- res += signs .pop () * int (s [start :i ])
40
- elif s [i ] == '+' :
41
- signs .append (signs [- 1 ])
42
- i += 1
43
- elif s [i ] == '-' :
44
- signs .append (- signs [- 1 ])
45
- i += 1
46
- elif s [i ] == '(' :
47
- signs .append (signs [- 1 ])
48
- i += 1
49
- elif s [i ] == ')' :
50
- signs .pop ()
51
- i += 1
29
+ s = s .replace (' ' , '' )
30
+ return self .cal (s , 0 )[0 ]
31
+
32
+ def update (self , stack , op , tmp ):
33
+ if op == '+' :
34
+ stack .append (tmp )
35
+ elif op == '-' :
36
+ stack .append (- tmp )
37
+ elif op == '*' :
38
+ stack [- 1 ] *= tmp
39
+ elif op == '/' :
40
+ stack [- 1 ] //= tmp
41
+
42
+ def cal (self , s , idx ):
43
+ stack = []
44
+ op = '+'
45
+ tmp = 0
46
+ while idx < len (s ):
47
+ if s [idx ].isdigit ():
48
+ tmp = tmp * 10 + int (s [idx ])
49
+ idx += 1
50
+ elif s [idx ] == '(' :
51
+ tmp , idx = self .cal (s , idx + 1 )
52
+ elif s [idx ] == ')' :
53
+ self .update (stack , op , tmp )
54
+ return sum (stack ), idx + 1
52
55
else :
53
- i += 1
54
- return res
56
+ self .update (stack , op , tmp )
57
+ op = s [idx ]
58
+ tmp = 0
59
+ idx += 1
60
+ self .update (stack , op , tmp )
61
+ return sum (stack ), idx
You can’t perform that action at this time.
0 commit comments