Leetcode练习(Python):栈类:第150题:逆波兰表达式求值:根据逆波兰表示法,求表达式的值。 有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

题目:

逆波兰表达式求值:根据逆波兰表示法,求表达式的值。  有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明:

  • 整数除法只保留整数部分。
  • 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

思路:

使用辅助栈来实现,思路较简单,注意除法运算的整数处理就好。

程序:

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        if not tokens:
            return 0
        length = len(tokens)
        stack1 = []
        stack2 = []
        for index in range(length):
            if tokens[index] not in "+-*/":
                stack1.append(int(tokens[index]))
            else:
                stack2.append(stack1.pop())
                stack2.append(stack1.pop())
                num1 = stack2.pop()
                num2 = stack2.pop()
                if tokens[index] == "+":
                    auxiliary = num1 + num2
                elif tokens[index] == "-":
                    auxiliary = num1 - num2
                elif tokens[index] == "*":
                    auxiliary = num1 * num2
                else:
                    auxiliary = int(num1 / num2)
                stack1.append(auxiliary)
        return stack1[-1]