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

    Some examples:

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

    Solution:

    需要注意operand为负数的情况。

    class Solution {
    public:
        int stringToInt(string s)
        {
            if(s.length() == 0)
                return 0;
            int p = 1;
            if(s[0] == '-') 
            {
                p = -1;
                s = s.substr(1, s.length() - 1);
            }
            int ans = s[0] - '0';
            for(int i = 1;i < s.length();i++)
                ans = ans * 10 + s[i] - '0';
            return ans * p;
        }
        
        int evalRPN(vector<string> &tokens) {
            int len = tokens.size(), ans = 0;
            int *operand = new int[len + 1], operandNum = 0;
            memset(operand, 0, (len + 1) * sizeof(int));
            
            int res = 0; // 0 for num, 1 +, 2 -, 3 *, 4 /
            for(int i = 0;i < len;i++)
            {
                if(tokens[i] == "+")
                {
                    operand[operandNum - 2] = operand[operandNum - 2] + operand[operandNum - 1];
                    operandNum--;
                }
                else if(tokens[i] == "-")
                {
                    operand[operandNum - 2] = operand[operandNum - 2] - operand[operandNum - 1];
                    operandNum--;
                }
                else if(tokens[i] == "*")
                {
                    operand[operandNum - 2] = operand[operandNum - 2] * operand[operandNum - 1];
                    operandNum--;
                }
                else if(tokens[i] == "/")
                {
                    operand[operandNum - 2] = operand[operandNum - 2] / operand[operandNum - 1];
                    operandNum--;
                }
                else
                {
                    int op = stringToInt(tokens[i]);
                    operand[operandNum++] = op;
                }
            }
            return operand[0];
        }
    };
  • 相关阅读:
    iOS开发-消息初认识
    小程序开发相关网址
    201703-4 地铁修建
    CCF 201703-3 Markdown
    UVALive 4998 Simple Encryption
    CCF 201609-4 交通规划
    CCF 201609-3 炉石传说
    UVALive 4270 Discrete Square Roots
    CCF 201604-2 俄罗斯方块
    codeforces 710E Generate a String
  • 原文地址:https://www.cnblogs.com/changchengxiao/p/3597401.html
Copyright © 2011-2022 走看看