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
题目要求实现一种“逆波兰表达式”,该表达式没有括号表示优先级,优先级完全体现在顺序中,从前到后扫描遇见符号就将符号前的两个数进行对应运算,然后将此数入栈,依次进行,遍历整个string向量。该题目为栈的典型应用
注意:1、尽量不要用switch语句,因为该语句支持吃 int 或者 char类型,使用if语句更好一些;2一定别忘处理只有vector中只有一个数字没有运算符的情况
代码如下:
1 class Solution { 2 public: 3 int evalRPN(vector<string>& tokens) { 4 int len = tokens.size(); 5 if (len == 1) 6 return stoi(tokens[0].c_str()); 7 stack<int> s; 8 for (int i = 0; i < len; i++) 9 { 10 if (tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/") 11 s.push(atoi(tokens[i].c_str())); 12 else 13 { 14 int m = s.top(); 15 s.pop(); 16 int n = s.top(); 17 s.pop(); 18 if (tokens[i] == "+") 19 s.push(n + m); 20 else if (tokens[i] == "-") 21 s.push(n - m); 22 else if (tokens[i] == "*") 23 s.push(n * m); 24 else 25 s.push(n / m); 26 } 27 28 } 29 return s.top(); 30 } 31 };
补充:c++11支持stoi函数,能直接将string转化为int