根据逆波兰表示法,求表达式的值。
有效的运算符包括 +
, -
, *
, /
。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
- 整数除法只保留整数部分。
- 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
解题思路:首先搞清楚基本的数学原理,即遇到符号时,需要操作的是前两个元素,使用栈的保存方式,遇到数字入栈,遇到符号把栈头两个元素出栈进行运算,再把结果压入栈内。
int Solution::evalRPN(vector<string>& tokens)
{
stack<int> StackPoland;
int temp1 = 0;
int temp2 = 0;
unsigned int index = 0;
for(index = 0; index < tokens.size(); index ++)
{
temp1 = temp2 = 0;
if(tokens[index] == "+")
{
temp1 = StackPoland.top();
StackPoland.pop();
temp2 = StackPoland.top();
StackPoland.pop();
StackPoland.push(temp1 + temp2);
}
else if(tokens[index] == "/")
{
temp1 = StackPoland.top();
StackPoland.pop();
temp2 = StackPoland.top();
StackPoland.pop();
StackPoland.push(temp2 / temp1);
}
else if(tokens[index] == "*")
{
temp1 = StackPoland.top();
StackPoland.pop();
temp2 = StackPoland.top();
StackPoland.pop();
StackPoland.push(temp2 * temp1);
}
else if(tokens[index] == "-")
{
temp1 = StackPoland.top();
StackPoland.pop();
temp2 = StackPoland.top();
StackPoland.pop();
StackPoland.push(temp2 - temp1);
}
else
{
StackPoland.push(stoi(tokens[index]));
}
}
return StackPoland.top();
}