前言
本题了解计算过程就比较简单,扫描字符串数组,碰到数字存入栈,碰到运算符(本题为双目运算符)栈中弹出两个数值,进行运算。
注意事项: ①栈的类型为long long 因为在力扣测试集中有long long 数量级的数。②判断条件采用判断是否遇到运算符,遇到数字另外处理,因为遇到数字的表达式不好表示。③判断条件遇到运算符要用双引号而不是单引号(如:“+”而不是‘+’),别看只有一个字符但是用字符串保存的实际上是“‘+’ ,‘\0’”两个字符。
代码
class Solution {
public:
int evalRPN(vector<string>& tokens)
{
stack<long long> tokens_queue;
for(int i=0;i<tokens.size();i++)
{
if(tokens[i]=="+" || tokens[i]=="-" || tokens[i]=="*" || tokens[i]=="/")
{
long long a=tokens_queue.top();
tokens_queue.pop();
long long b=tokens_queue.top();
tokens_queue.pop();
if(tokens[i]=="+") tokens_queue.push(a+b);
else if(tokens[i]=="-") tokens_queue.push(b-a);
else if(tokens[i]=="*") tokens_queue.push(a*b);
else if(tokens[i]=="/") tokens_queue.push(b/a);
}
else
{
tokens_queue.push(stoll(tokens[i]));
}
}
int result=tokens_queue.top();
tokens_queue.pop();
return result;
}
};