Problem: 150. 逆波兰表达式求值
方法一:栈
思路
逆波兰式又称后缀表达式(将运算符放在操作数之后),是栈的一个典型应用。由于计算机采用的普遍是栈式结构,逆波兰式的特点就是计算机运算非常方便,计算机处理过程只需要顺序读入。进行如下操作:
- 如果遇到数字,则放入栈中。
- 如果是运算符,则将两个栈中数字取出进行运算,记第一个弹出的数字为 b b b,第二个弹出的数字为 a a a,运算结果为 a 操作符 b a 操作符 b a操作符b。
当逆波兰式遍历完毕后,栈内只有一个元素,该元素即为逆波兰表达式的值。
Code
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> st;
for(string token : tokens){
if(!(token == "+" || token == "-" || token == "*" || token == "/")){
st.push(stoi(token));
}else{
int b = st.top();
st.pop();
int a = st.top();
st.pop();
if(token == "+"){
st.push(a + b);
}else if(token == "-"){
st.push(a - b);
}else if(token == "*"){
st.push(a * b);
}else if(token == "/"){
st.push(a / b);
}
}
}
return st.top();
}
};
复杂度
-
时间复杂度: O ( n ) O(n) O(n)
-
空间复杂度: O ( n ) O(n) O(n)