• [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];
        }
    };
  • 相关阅读:
    剑指offer14-链表中倒数第k个结点
    剑指offer15-翻转链表
    Matlab矩阵操作
    CUDA线程
    CUDA编程前言
    ROS常用工具
    ROS理解参数服务器param demo
    ROS手动编写服务端和客户端service demo(C++)
    ROS手动编写消息发布器和订阅器topic demo(C++)
    ROS参数服务器(Parameter Server)
  • 原文地址:https://www.cnblogs.com/changchengxiao/p/3597401.html
Copyright © 2020-2023  润新知