题目
计算逆波兰式(后缀表达式)的值
运算符仅包含"+","-","*“和”/",被操作数可能是整数或其他表达式
例如:
[“2”, “1”, “+”, “3”, “*”] -> ((2 + 1) * 3) -> 9↵ [“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6
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
思路
很简单的思路:可以将所有的数字和符号按顺序压入栈中,然后遇到运算符时,就取出栈顶的两个数字进行运算,运算之后又压入栈中,如此遍历一遍,最后栈中只剩最后一个元素,也就是要求的结果了。
代码如下
class Solution {
public:
int evalRPN(vector<string> &tokens) {
stack<int> numbers;
for (auto token: tokens)
{
if (token=="+"|| token=="-"||token=="*"||token=="/")
{
int a,b, result;
a = numbers.top();numbers.pop();
b = numbers.top();numbers.pop();
if (token=="+")
result = a+b;
else if (token=="-")
result = b-a;
else if (token=="*")
result = a*b;
else
result = b/a;
numbers.push(result);
}
else
{
stringstream s;
s << token;
int cur;
s>>cur;
numbers.push(cur);
}
}
return numbers.top();
}
};
代码主要是熟悉vector,stack,stringstream和auto关键字这几个知识点。