zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【LeetCode】150.逆波兰表达式求值

LeetCode 表达式 150 求值 波兰
2023-09-14 09:13:25 时间

1. 题目

在这里插入图片描述

2. 分析

python 中的 // 是 向下除法,和本题要求的除法不太一样。本题中
6/(-132)= 0 ,但如果用Python的话6//(-132)=-1 ,导致最后计算错误,于是我单独写了一个判断逻辑,看二者是否是负数,如果是负数,向上取整。

3. 代码


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]