zoukankan      html  css  js  c++  java
  • 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.

    Note:

    • Division between two integers should truncate toward zero.
    • The given RPN expression is always valid. That means the expression would always evaluate to a result and there won't be any divide by zero operation.

    Example 1:

    Input: ["2", "1", "+", "3", "*"]
    Output: 9
    Explanation: ((2 + 1) * 3) = 9
    

    Example 2:

    Input: ["4", "13", "5", "/", "+"]
    Output: 6
    Explanation: (4 + (13 / 5)) = 6
    

    Example 3:

    Input: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
    Output: 22
    Explanation: 
      ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
    = ((10 * (6 / (12 * -11))) + 17) + 5
    = ((10 * (6 / -132)) + 17) + 5
    = ((10 * 0) + 17) + 5
    = (0 + 17) + 5
    = 17 + 5
    = 22

    解题思路:

    这个是操作符在后面的形式。

    我们可以用栈来辅助进行计算:

      当遇见数字字符串时,需要转换成int并进行压栈;

      当遇见操作符字符串时,取出栈顶前两个元素,计算后将结果压栈

    代码:

    class Solution {
    public:
        int evalRPN(vector<string>& tokens) {
            stack<int> stk;
            int ret = 0;
            for(int i = 0; i < tokens.size(); i++){
                if(tokens[i].size() == 1){
                    int isOp = isOperator(tokens[i]);
                    if(isOp >= 0){
                        int a = stk.top();
                        stk.pop();
                        int b = stk.top();
                        stk.pop();
                        if(isOp == 0){
                            stk.push(a+b);
                        }else if(isOp == 1){
                            stk.push(b-a);
                        }else if(isOp == 2){
                            stk.push(b*a);
                        }else if(isOp == 3){
                            stk.push(b / a);
                        }
                        continue;
                    }
                }
                int num = stoi(tokens[i]);
                stk.push(num);
            }
            return stk.top();
        }
    private:
        int isOperator(string s){
            if(s == "+")
                return 0;
            if(s == "-")
                return 1;
            if(s == "*")
                return 2;
            if(s == "/")
                return 3;
            return -1;
        }
    };
  • 相关阅读:
    Spring MVC的Controller统一异常处理:HandlerExceptionResolver
    spring mvc 404页面制作
    MyEclipse导出可运行的jar包
    Spring的编程式事务和声明式事务
    数据库SQL优化大总结
    LinkedList源码及原理
    ArrayList源码分析
    HashMap源码及原理
    Java集合框架常见面试题
    idea获取激活码
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9227088.html
Copyright © 2011-2022 走看看