题目链接:https://leetcode.com/problems/evaluate-reverse-polish-notation/
题意:
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
此题考察点:逆波兰式,后缀表达式。借用栈可以解决。此题另外用到了C++11中新加的几个库函数。to_string函数,这是C++11新增的,使用非常方便,简单查了下:C++11标准增加了全局函数std::to_string,以及std::stoi/stol/stoll等等函数(这几个就是string转int,long,以及long long啦~)
to_string这个函数还是很强大的!
string to_string (int val); string to_string (long val); string to_string (long long val); string to_string (unsigned val); string to_string (unsigned long val); string to_string (unsigned long long val); string to_string (float val); string to_string (double val); string to_string (long double val)
class Solution { public: int evalRPN(vector<string>& tokens) { stack<string> s; for(auto token:tokens){ if(!is_operator(token)){ s.push(token); } else{ int y = stoi(s.top()); s.pop(); int x = stoi(s.top()); s.pop(); if(token[0]=='+') x+=y; else if(token[0]=='-') x-=y; else if(token[0]=='*') x*=y; else x/=y; s.push(to_string(x)); } } return stoi(s.top()); } private: bool is_operator(const string &op){ return op.size()==1 && string("+-*/").find(op)!= string::npos; } };