给你一个字符串数组 tokens
,表示一个根据 逆波兰表示法 表示的算术表达式。
请你计算该表达式。返回一个表示表达式值的整数。
注意:
- 有效的算符为
'+'
、'-'
、'*'
和'/'
。 - 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
- 两个整数之间的除法总是 向零截断 。
- 表达式中不含除零运算。
- 输入是一个根据逆波兰表示法表示的算术表达式。
- 答案及所有中间计算结果可以用 32 位 整数表示。
向零取整(向零截断) 取距离0最近的精确整数值。
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
res = []
for item in tokens:
if item == '+' or item == '-' or item == '*' or item == '/':
nums1 = res.pop()
nums2 = res.pop()
if item == '+':
res.append(nums1 + nums2)
if item == '-':
res.append(nums2 - nums1)
# 注意不是nums1 - nums2 因为pop的顺序
if item == '*':
res.append(nums1 * nums2)
if item == '/':
# res.append(nums2 // nums1)
# 上式不对。例如6/(-132)结果本来应该是0但是这个除法(//)(也称地板除)会得到-1的结果。正确应该是:
res.append(int(nums2 / nums1))
else:
res.append(int(item))
return res.pop()
eval()是python中功能非常强大的一个函数
- 将字符串当成有效的表达式来求值,并返回计算结果
- 所谓表达式就是:eval这个函数会把里面的字符串参数的引号去掉,把中间的内容当成Python的代码,eval函数会执行这段代码并且返回执行结果
stack.append( int(eval(f'{second_num} {item} {first_num}')))