LeetCode 150. 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

题目要求实现一种“逆波兰表达式”,该表达式没有括号表示优先级,优先级完全体现在顺序中,从前到后扫描遇见符号就将符号前的两个数进行对应运算,然后将此数入栈,依次进行,遍历整个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

posted @ 2018-04-03 15:39  皇家大鹏鹏  阅读(137)  评论(0编辑  收藏  举报