evaluate-reverse-polish-notation

来源:互联网 发布:青苹果申报数据库 编辑:程序博客网 时间:2024/06/02 06:04

题目描述


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
逆波兰表达式,形式为(a+b)*c=》ab+c*

那么ab+c*的执行结果如下:
a入栈(0位置); b入栈(1位置); 遇到运算符“+”,将a和b出栈,执行a+b的操作,得到结果d=a+b,再将d入栈(0位置); c入栈(1位置); 遇到运算符“*”,将d和c出栈,执行d*c的操作,得到结果e,再将e入栈(0位置)。

class Solution {public:     int str2int(string s) // string转int    {        int result = 0;        int base = 1;        int t = 1; // 正负号         if (s[0] == '-')            t = -1;         for (int i = s.size() - 1; i >= 0; --i)        {            if (s[i] >= '0' && s[i] <= '9')            {                result += base * (s[i] - '0');                  base *= 10;            }        }         return result * t;    }        int evalRPN(vector<string> &tokens) {           stack<int> k;         for (int i = 0; i < tokens.size(); ++i)        {            if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/")            {                int Num2 = k.top(); // 第一个取出的是右操作数                k.pop();                int Num1 = k.top(); // 左操作数                k.pop();                 if (tokens[i] == "+"){                    k.push(Num1 + Num2);                }                else if (tokens[i] == "-"){                    k.push(Num1 - Num2);                }                else if (tokens[i] == "*"){                    k.push(Num1 * Num2);                }                else if (tokens[i] == "/"){                    k.push(Num1 / Num2);                }            }            else                k.push(str2int(tokens[i]));        }        return k.top(); // 最后栈剩下一个元素,就是结果    }    };




原创粉丝点击