题目描述
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,用栈,注意左右操作数顺序。
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <stdio.h>
#include <stack>
#include <string>
#include <queue>
using namespace std;
class Solution {
public:
int evalRPN(vector<string> &tokens) {
stack<int> s;
int n = tokens.size();
string s1;
int ln, rn;
for (int i = 0; i < n; i++){
s1 = tokens[i];
if (s1 == "+"){
rn = s.top(); s.pop();
ln = s.top(); s.pop();
s.push(ln + rn);
}
else if (s1 == "-"){
rn = s.top(); s.pop();
ln = s.top(); s.pop();
s.push(ln - rn);
}
else if (s1 == "*"){
rn = s.top(); s.pop();
ln = s.top(); s.pop();
s.push(ln * rn);
}
else if (s1 == "/"){
rn = s.top(); s.pop();
ln = s.top(); s.pop();
s.push(ln / rn);
}
else{
s.push(atoi(s1.c_str()));
}
}
return s.top();
}
};
int main(){
vector<string> a = { "2", "1", "+", "3", "*" };
for (int i = 0; i < a.size(); i++){
std::cout << a[i] << std::endl;
}
Solution s;
cout << s.evalRPN(a);
}