python 中的 //
是 向下除法,和本题要求的除法不太一样。本题中
6/(-132)
= 0 ,但如果用Python的话6//(-132)=-1
,导致最后计算错误,于是我单独写了一个判断逻辑,看二者是否是负数,如果是负数,向上取整。
import math
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
stack = []
# 遍历 tokens 序列
for i in range(len(tokens)):
try:
num = int(tokens[i])
stack.append(num) # 放入到num中
except:
# 弹出两个值,进行计算
nums1,nums2 = stack[-1],stack[-2]
stack.pop() # 弹出
stack.pop()
# print(tokens[i],stack)
cur = None
if tokens[i] == '+':
cur = nums2 + nums1
elif tokens[i] == '-':
cur = nums2 - nums1
elif tokens[i] == '*':
cur = nums1 * nums2
elif tokens[i] == '/':
if nums2 * nums1 < 0:
cur = abs(nums2) // abs(nums1) * (-1)
else:
cur = nums2 // nums1
# print(nums2,nums1,cur)
stack.append(cur)
# print(cur)
return stack[-1]