zoukankan      html  css  js  c++  java
  • LeetCode | Evaluate Reverse Polish Notation

    The algorithm for evaluating any postfix expression is fairly straightforward:

    While there are input tokens left

      • Read the next token from input.
      • If the token is a value
        • Push it onto the stack.
      • Otherwise, the token is an operator (operator here includes both operators and functions).
        • It is known a priori that the operator takes n arguments.
        • If there are fewer than n values on the stack
          • (Error) The user has not input sufficient values in the expression.
        • Else, Pop the top n values from the stack.
        • Evaluate the operator, with the values as arguments.
        • Push the returned results, if any, back onto the stack.
    • If there is only one value in the stack
      • That value is the result of the calculation.
    • Otherwise, there are more values in the stack
      • (Error) The user input has too many values.
     1 class Solution {
     2 public:
     3     int evalRPN(vector<string> &tokens) {
     4         if (tokens.empty()) return 0;
     5         
     6         stack<int> st;
     7         
     8         for (int i = 0; i < tokens.size(); ++i) {
     9             if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {
    10                 if (st.empty()) return 0;
    11                 int n1 = st.top();
    12                 st.pop();
    13                 if (st.empty()) return 0;
    14                 int n2 = st.top();
    15                 st.pop();
    16                 if (tokens[i] == "+") st.push(n1 + n2);
    17                 else if (tokens[i] == "-") st.push(n2 - n1);
    18                 else if (tokens[i] == "*") st.push(n2 * n1);
    19                 else if (n1 == 0) return 0;
    20                 else st.push(n2 / n1);
    21             } else {
    22                 st.push(atoi(tokens[i].c_str()));
    23             }
    24         }
    25         
    26         return st.top();
    27     }
    28 };
  • 相关阅读:
    Sqlite 语句 记录
    string.Format对C#字符串格式化
    C#耗时计算
    控件缩放
    C# winfrom Datagridview表头样式和选中样式
    C# winfrom Datagridview控件下拉菜单
    C# 平台问题
    编程思想
    强制删除sql用户链接
    MyEclipse快捷键大全
  • 原文地址:https://www.cnblogs.com/linyx/p/3656406.html
Copyright © 2011-2022 走看看