zoukankan      html  css  js  c++  java
  • #Leetcode# 150. Evaluate Reverse Polish Notation

    https://leetcode.com/problems/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

    代码:

    class Solution {
    public:
        int evalRPN(vector<string>& tokens) {
            stack<string> stck;
            for (auto op : tokens) {
                if (op == "+") {
                    int operand2 = stoi(stck.top()); stck.pop();
                    int operand1 = stoi(stck.top()); stck.pop();
                    int result = operand1 + operand2;
                    stck.push(to_string(result));
                } else if (op == "-") {
                    int operand2 = stoi(stck.top()); stck.pop();
                    int operand1 = stoi(stck.top()); stck.pop();
                    int result = operand1 - operand2;
                    stck.push(to_string(result));
                } else if (op == "*") {
                    int operand2 = stoi(stck.top()); stck.pop();
                    int operand1 = stoi(stck.top()); stck.pop();
                    int result = operand1 * operand2;
                    stck.push(to_string(result));
                } else if (op == "/") {
                    int operand2 = stoi(stck.top()); stck.pop();
                    int operand1 = stoi(stck.top()); stck.pop();
                    int result = operand1 / operand2;
                    stck.push(to_string(result));
                } else {
                    stck.push(op);
                }
            }
            int res = stoi(stck.top()); stck.pop();
            return res;
        }
    };
    View Code

    大一的时候记得讲过这个东西 用到 $stack$ 遇到符号的时候从栈里弹出两个进行运算然后把结果再压进去 

  • 相关阅读:
    系统安装之:虚拟机VMware V12.0.1 专业版 + 永久密钥
    PHP之:析构函数
    HTML之:让网页中的<a>标签属性统一设置-如‘新窗口打开’
    HTML之:fieldset——一个不常用的HTML标签
    系统配置 之:远程桌面连接(win7系统)
    Code笔记 之:注册页面验证码
    PHP之:PHP框架
    Code笔记 之:防盗链(图片)
    Ehcache(2.9.x)
    Ehcache(2.9.x)
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/10040265.html
Copyright © 2011-2022 走看看