• [LintCode] 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.

    Example
    ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
    ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

    LeetCode上的原题,请参见我之前的博客Evaluate Reverse Polish Notation

    解法一:

    class Solution {
    public:
        /**
         * @param tokens The Reverse Polish Notation
         * @return the value
         */
        int evalRPN(vector<string>& tokens) {
    
        stack<int> s;
            for (auto a : tokens) {
                if (a == "+" || a == "-" || a == "*" || a == "/") {
                    if (s.size() < 2) break;
                    int t = s.top(); s.pop();
                    int k = s.top(); s.pop();
                    if (a == "+") k += t;
                    else if (a == "-") k -= t;
                    else if (a == "*") k *= t;
                    else if (a == "/") k /= t;
                    s.push(k);
                } else {
                    s.push(stoi(a));
                }
            }
            return s.top();
        }
    };

    解法二:

    class Solution {
    public:
        /**
         * @param tokens The Reverse Polish Notation
         * @return the value
         */
        int evalRPN(vector<string>& tokens) {
            int op = tokens.size() - 1;
            return helper(tokens, op);
        }
        int helper(vector<string>& tokens, int& op) {
            string s = tokens[op];
            if (s == "+" || s == "-" || s == "*" || s == "/") {
                int v2 = helper(tokens, --op);
                int v1 = helper(tokens, --op);
                if (s == "+") return v1 + v2;
                else if (s == "-") return v1 - v2;
                else if (s == "*") return v1 * v2;
                else return v1 / v2;
            } else {
                return stoi(s);
            }
        }
    };
  • 相关阅读:
    POJ 1306.Combinations
    HDU 5640.King's Cake
    HDU 1072.Nightmare
    HDU 2717.Catch That Cow
    HDU 1372.Knight Moves
    HDU 1548.A strange lift
    AOJ 802.运输宝物
    AOJ 794.西瓜理发记(二)
    AOJ 793.西瓜理发记(一)
    AOJ 789.买酒
  • 原文地址:https://www.cnblogs.com/grandyang/p/5702054.html
Copyright © 2020-2023  润新知