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
计算最终结果。
最开始傻傻的非要模拟栈,从数组末尾倒着遍历,写着写着觉得自己怕不是失了智。。。直接正着遍历就好了呀QAQ然后又各种找C++中int与string转化的函数,未果,最后还是默默地写了循环。。。
时间复杂度O(n),空间复杂度O(n)
class Solution {
public:
int evalRPN(vector<string>& tokens) {
if (tokens.empty()) return 0;
stack<int> s;
for (int i = 0; i < tokens.size(); ++i) {
if (tokens[i] == "+") {
int a = s.top();
s.pop();
int b = s.top();
s.pop();
s.push(a + b);
}
else if (tokens[i] == "-") {
int a = s.top();
s.pop();
int b = s.top();
s.pop();
s.push(b - a);
}
else if (tokens[i] == "*") {
int a = s.top();
s.pop();
int b = s.top();
s.pop();
s.push(a * b);
}
else if (tokens[i] == "/") {
int a = s.top();
s.pop();
int b = s.top();
s.pop();
s.push(b / a);
}
else {
int num = 0;
bool flag = true;
if (tokens[i][0] == '-') flag = false;
for (auto x: tokens[i]) {
if (x == '-') continue;
num = num * 10 + (x - '0');
}
s.push(flag ? num: -num);
}
}
return s.top();
}
};