首先介绍定义
逆波兰式
逆波兰式定义
其中的一个例子能很好地让我们理解逆波兰式的定义
现在回到原题
leetcode 150.逆波兰表达式求值
对tokens的元素进行分类讨论:
i) 字符运算符,对栈中的前两项元素进行操作(先后出栈以获取栈顶)
ii)字符数字,将字符转化为数字,进行入栈,等待之后的操作
注意:在减法运算时,注意从栈中获取的值的位置是否对应减数和被减数。除法同理
以下是AC代码
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> s;
int n = tokens.size();
if( n == 0)
return 0;
int num1, num2;
for(auto i : tokens){//遍历tokens元素
if(i == "+"){
num1 = s.top();
s.pop();
num2 = s.top();
s.pop();
s.push(num1 + num2);
}
else if(i == "-"){
num1 = s.top();
s.pop();
num2 = s.top();
s.pop();
s.push(num2 - num1);
}
else if(i == "*"){
num1 = s.top();
s.pop();
num2 = s.top();
s.pop();
s.push(num1 * num2);
}
else if(i == "/"){
num1 = s.top();
s.pop();
num2 = s.top();
s.pop();
s.push(num2 / num1);
}
else
s.push(atoi(i.c_str()));//将字符转化为数字
}
return s.top();//返回最后的值
}
};