• [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
    iOS
    iOS The problems that i encountered
    HTTP STATUS CODE
    MySQL死锁导致无法查询的问题
    JAVA 响应时,按照指定的日期格式返回
    easy额xcel 生成Excel表并返回浏览器弹出下载的简单实现
    Byte数组和字符串相互转换的问题
    Springboot 使用过滤器进行加密解密(二)
    Springboot 部署到linux(二)
  • 原文地址:https://www.cnblogs.com/changchengxiao/p/3597401.html
Copyright © 2020-2023  润新知