题目链接
题目描述
根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
- 整数除法只保留整数部分。
- 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例
示例1:
输入:tokens = [“2”,”1”,”+”,”3”,”“] 输出:9 解释:该算式转化为常见的中缀算术表达式为:((2 + 1) 3) = 9
提示
1 <= tokens.length <= 10tokens[i]要么是一个算符("+"、"-"、"*"或"/"),要么是一个在范围[-200, 200]内的整数思路
栈
维护一个栈储存操作数,从头遍历表达式:
如果是操作数,则直接入栈
- 如果是运算符,则将两个操作数出栈,将运算结果入栈
题解
class Solution {public:int evalRPN(vector<string>& tokens) {stack<int> stk;for (string str : tokens) {if (str == "+" || str == "-" || str == "*" || str == "/") {int num2 = stk.top();stk.pop();int num1 = stk.top();stk.pop();switch (str[0]) {case '+':stk.push(num1 + num2);break;case '-':stk.push(num1 - num2);break;case '*':stk.push(num1 * num2);break;case '/':stk.push(num1 / num2);break;}} else {stk.push(stoi(str));}}return stk.top();}};
复杂度分析
- 时间复杂度:
- 空间复杂度:
