Evaluate Reverse Polish Notation

来源:互联网 发布:中科大还有网络教育吗 编辑:程序博客网 时间:2024/05/29 03:14

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

逆波兰表达式是一个经典的堆栈数据结构例程。 

用stack容器适配器来完成堆栈操作,注意 “-” 与 “-n” 的区别。

class Solution {public:    int evalRPN(vector<string> &tokens)    {      stack<int> intstack;      for(int i = 0; i < tokens.size(); i++)      {        istringstream iss(tokens[i]);        int num;        char ch = tokens[i][0];        if((ch == '-' && (tokens[i].size() != 1)) || isdigit(ch))        {          iss >> num;          intstack.push(num);        }        else        {          int a, b;          a = intstack.top();          intstack.pop();          b = intstack.top();          intstack.pop();          int c;          switch(ch)          {            case '+':              c = a + b;              break;            case '-':              c = b - a;              break;            case '*':              c = a * b;              break;            case '/':              c = b / a;              break;            default:              break;          }          intstack.push(c);        }      }          return intstack.top();    }};


0 0
原创粉丝点击