这类题目虽然很烦,但是考察的知识点就是栈!!!只要细心,并且把栈弄透就没问题。
遇到的问题: -3 // 2 = -2注意,往小取整。
# 1. 如果碰到数字, 则把数字入栈
# 2. 如果碰到空格, 则继续下一步
# 3. 如果碰到 '+' '-' '*' '/', 则查找下一个数字num
# A.如果是'+', 下一个数字num直接入栈
# B.如果是'-',-num入栈
# C.如果是'*', num = stack.pop() * num, 入栈
# D.如果是'/', num = stack.pop() / num, 入栈
# 4. 最后,把栈里的数相加就是结果
class Solution:
def calculate(self, s: str) -> int:
if not s:
return 0
stack = []
pre_cal = "+"
res = "0"
for i in range(len(s)):
if s[i] == " ":
continue
if "0" <= s[i] <= "9":
res += s[i]
else:
if pre_cal == "+":
stack.append(int(res))
elif pre_cal == "-":
stack.append(-int(res))
elif pre_cal == "*":
stack[-1] *= int(res)
else:
if stack[-1] < 0: # -3 // 2 = -2 注意了~~~
stack[-1] = -(-stack[-1] // int(res))
else:
stack[-1] = stack[-1] // int(res)
pre_cal = s[i]
res = "0"
if res != "0":
if pre_cal == "+":
stack.append(int(res))
elif pre_cal == "-":
stack.append(-int(res))
elif pre_cal == "*":
stack[-1] *= int(res)
else:
if stack[-1] < 0: # -3 // 2 = -2 注意了~~~
stack[-1] = -(-stack[-1] // int(res))
else:
stack[-1] = stack[-1] // int(res)
return sum(stack)