LeetCode 150. 逆波兰表达式求值
原题链接
中等
作者:
畴昔的誓言
,
2021-03-20 09:06:59
,
所有人可见
,
阅读 277
利用栈,遇到操作数入栈 ,遇到运算符则从数字栈中取出两个数进行运算并将结果入栈,直至栈中没有操作符,此时栈顶元素即为运算结果
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> num; //存放操作数的栈
int n = tokens.size();
for(int i=0; i<n; i++){
if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "/" || tokens[i] == "*")
{
int num2 = num.top(); //这里注意应为num2,在遇到/时作为被除数
num.pop();
int num1 = num.top();
num.pop();
if(tokens[i] == "+"){
num.push(num1 + num2);
}
if(tokens[i] == "-"){
num.push(num1 - num2);
}
if(tokens[i] == "*"){
num.push(num1 * num2);
}
if(tokens[i] == "/") num.push(num1 / num2);
}
else num.push(stoi(tokens[i]));
}
return num.top();
}
};