class Solution {public: int evalRPN(vector<string>& tokens) { int sz = tokens.size(); if(!sz) return 0; std::stack<int> opnd; int flag=0; for(int i = 0; i < sz; ++i){ if(flag=is_optr(tokens[i])){ // 操作符-弹出两操作数计算入栈 int right = opnd.top(); opnd.pop(); int left = opnd.top(); opnd.pop(); int tmp = cal_exp(flag, left, right); opnd.push(tmp); } else // 操作数-进栈 { int val = string_to_int(tokens[i]); opnd.push( val ); } } return opnd.top(); }PRivate: int string_to_int(const std::string& num){ std::stringstream ss; ss << num; int ret; ss >> ret; return ret; } int is_optr(const std::string& s){ if( s == "+" ) return 1; else if( s=="-" ) return 2; else if( s=="*" ) return 3; else if( s=="/" ) return 4; else return 0; } int cal_exp(int flag, int left, int right){ int ans = 0; switch(flag){ case 1 : ans = left + right;break; case 2 : ans = left - right;break; case 3 : ans = left * right;break; case 4 : ans = left / right;break; default : break; } return ans; }};