题目:
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
分析:
逆波兰式计算等式非常容易,利用堆栈即可完成。另外,程序中还需要实现整数与字符串之间的相互转换。
- 这题目以前做过,所以一遍AC。
代码:
class Solution {
public:
int evalRPN(vector<string>& tokens) {
int len=tokens.size();
stack<int> S;
for(int i = 0; i < len; i++)
{
if(tokens[i] == "+" || tokens[i] == "-" ||
tokens[i] == "*" || tokens[i] == "/")
{
int op2 = S.top();
S.pop();
int op1 = S.top();
S.pop();
S.push( op(op1, op2, tokens[i][0]) );
}
else
S.push(stoi(tokens[i]));//stoi() 把字符串转换成数字
}
return S.top();
}
int op(int op1, int op2, char optor)
{
if(optor == '+')return op1 + op2;
else if(optor == '-')return op1 - op2;
else if(optor == '*')return op1 * op2;
else return op1 / op2;
}
};