思路:
- 利用堆栈进行逆波兰式求值
 - 如果遇到整数,就入栈
 - 如果遇到符号,就将最上面的两个数字弹栈,进行运算之后得到新的数字,并入栈
 - 最后一定只剩下一个数字,那个数字就是最终得数
 - 字符串转整数的细节比较繁琐
代码:
 
class Solution {public:    int stringToNum(string num_string) {        if (num_string == "*" || num_string == "/" || num_string == "+" || num_string == "-") {            return 0x3f3f3f3f;        }        bool negative = false;        int res_num = 0;        int begin_pos = 0, end_pos = num_string.size() - 1;        // 读掉符号        if (num_string[0] == '-') {            negative = true;            begin_pos = 1;        } else if (num_string[0] == '+') {            begin_pos = 1;        }         for (int i = begin_pos; i <= end_pos; ++i) {            res_num = (res_num * 10 + (num_string[i] - '0'));        }         return res_num * (negative == false ? 1 : -1);    }    int evalRPN(vector<string>& tokens) {        stack<int> post_expr;        int len_tokens = tokens.size();        for (int i = 0; i < len_tokens; ++i) {            if (stringToNum(tokens[i]) >= -200 && stringToNum(tokens[i]) <= 200) {                post_expr.push(stringToNum(tokens[i]));            } else {                int num2 = post_expr.top();                post_expr.pop();                int num1 = post_expr.top();                post_expr.pop();                int new_num = 0;                if (tokens[i] == "*") {                    new_num = num1 * num2;                } else if (tokens[i] == "/") {                    new_num = num1 / num2;                } else if (tokens[i] == "+") {                    new_num = num1 + num2;                } else if (tokens[i] == "-") {                    new_num = num1 - num2;                }                post_expr.push(new_num);            }        }        return post_expr.top();    }};