题目见下:
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +
, -
, *
, /
. Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
解答思路:
1)准备一个栈空间,作存数据之用。
2)从表达式中取出数据,若是数据,压入栈中,若是符号,从栈顶中取出两个数据,计算其值,重新压入栈中。
3)直到表达式的数据取完,栈中最后一个值,即为表达式的值。
代码见下:
class Solution {
public:
int evalRPN(vector<string> &tokens) {
if(tokens.empty())
{
return 0;
}
stack<int>s;
int num1 = -1;
int num2 = -1;
int answer = -1;
for(vector<string>::iterator it = tokens.begin();it!=tokens.end();it++)
{
string str = *it;
if(str.compare("+")==0)
{
if(s.size()<2)
{
return 0;
}
num2 = s.top();
s.pop();
num1 = s.top();
s.pop();
answer = num1+num2;
s.push(answer);
}
else if(str.compare("-")==0)
{
if(s.size()<2)
{
return 0;
}
num2 = s.top();
s.pop();
num1 = s.top();
s.pop();
answer = num1-num2;
s.push(answer);
}
else if(str.compare("*")==0)
{
if(s.size()<2)
{
return 0;
}
num2 = s.top();
s.pop();
num1 = s.top();
s.pop();
answer = num1*num2;
s.push(answer);
}
else if(str.compare("/")==0)
{
if(s.size()<2)
{
return 0;
}
num2 = s.top();
s.pop();
num1 = s.top();
s.pop();
answer = num1/num2;
s.push(answer);
}
else
{
answer = atoi(str.c_str());
s.push(answer);
}
}
answer = s.top();
s.pop();
return answer;
}
};