File tree 1 file changed +37
-0
lines changed
1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def calculate (self , s : str ) -> int :
3
+ """
4
+ stack: 最后只保留需要相加的数字
5
+ *: stack[-1] * num
6
+ /: stack[-1] // num
7
+ -: -num
8
+ +: num
9
+ return sum(stack)
10
+ """
11
+ stack = []
12
+ s = s .strip ()
13
+ num = 0
14
+ pre_sign = "+"
15
+ for i in range (len (s )):
16
+ if s [i ].isdigit ():
17
+ num = num * 10 + int (s [i ])
18
+ if s [i ] in "+-*/" or i == len (s ) - 1 :
19
+ if pre_sign == "+" :
20
+ stack .append (num )
21
+ elif pre_sign == "-" :
22
+ stack .append (- num )
23
+ elif pre_sign == "*" :
24
+ stack [- 1 ] = stack [- 1 ] * num
25
+ elif pre_sign == "/" :
26
+ # note! -3 // 2 == -2, 所以对负数需要转成正数处理后再变成负数
27
+ stack [- 1 ] = stack [- 1 ] // num if stack [- 1 ] > 0 else - ((- stack [- 1 ]) // num )
28
+ num = 0
29
+ pre_sign = s [i ]
30
+ return sum (stack )
31
+
32
+
33
+ if __name__ == "__main__" :
34
+ assert Solution ().calculate (s = "3+2*2" ) == 7
35
+ assert Solution ().calculate (s = " 3/2 " ) == 1
36
+ assert Solution ().calculate (s = " 3+5 / 2 " ) == 5
37
+ assert Solution ().calculate (s = "14-3/2" ) == 13
You can’t perform that action at this time.
0 commit comments