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 {
int my_atoi(string s)
{
int re = 0;
bool positive = true;
while (s[0] == '-' || s[0] == '+')
{
if (s[0] == '-')
positive = !positive;
s.erase(0, 1);
}
for (int i = 0; i < s.length(); i++)
re = 10 * re + s[i] - '0';
return positive ? re : -re;
}
public:
int evalRPN(vector<string>& tokens) {
if (tokens.empty())
return 0;
vector<int>nums;
for (int i = 0; i < tokens.size(); i++)
{
if (tokens[i].compare("+") == 0)
{
int n1 = nums.back(); nums.pop_back();
int n2 = nums.back(); nums.pop_back();
nums.push_back(n1 + n2);
}
else if (tokens[i].compare("-")==0)
{
int n1 = nums.back(); nums.pop_back();
int n2 = nums.back(); nums.pop_back();
nums.push_back(n2 - n1);
}
else if (tokens[i].compare("*") == 0)
{
int n1 = nums.back(); nums.pop_back();
int n2 = nums.back(); nums.pop_back();
nums.push_back(n1 * n2);
}
else if (tokens[i].compare("/") == 0)
{
int n1 = nums.back(); nums.pop_back();
int n2 = nums.back(); nums.pop_back();
nums.push_back(n2/n1);
}
else
nums.push_back(my_atoi(tokens[i]));
}
return nums[0];
}
};
accepted