(1) 使用stack;
(2) 两个operator数的顺序。
(3) 每次只计算一次,并且把结果再压入stack,作为下一次操作数。
(4) 如果没有operator,那么stack里只是保存了最后一次计算的结果,直接return。
int evalRPN(vector<string>& tokens) {
stack<int> stk;
for(int i=0;i<tokens.size();i++) {
string s = tokens[i];
if(s != "+" && s != "-" && s!="*" && s!="/") {
stk.push(stoi(s));
} else {
while(!stk.empty()) {
int second = stk.top();
stk.pop();
int first = stk.top();
stk.pop();
int res;
string tmp = tokens[i];
if(tmp == "+")
res = first + second;
else if(tmp == "-")
res = first - second;
else if(tmp == "*")
res = first * second;
else if(tmp == "/")
res = first / second;
stk.push(res);
break;
}
}
}
if(!stk.empty())
return stk.top();
return -1;
}