zoukankan      html  css  js  c++  java
  • Evaluate Reverse Polish Notation (STRINGTYPE CONVERTION)

    Question

    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

    1ST TRY

    class Solution {
    public:
        int evalRPN(vector<string> &tokens) {
            int operant1;
            int operant2;
            string str;
            int ret;
            bool firstOp = false;
            
            for(int i = 0; i < tokens.size(); i++)
            {
                str = tokens[i];
                if(!firstOp)
                {
                    operant1 = getInt(str);;
                    firstOp = true;
                }
                else if(str == "+")
                {
                    ret = operant1 + operant2;
                }
                else if(str == "-")
                {
                    ret = operant1 - operant2;
                }
                else if(str == "*")
                {
                    ret = operant1 * operant2;
                }
                else if(str == "/")
                {
                    ret = operant1 / operant2;
                }
                else
                {
                    operant2 = getInt(str);
                    firstOp = false;
                }
            }
            
            return ret;
        }
        int getInt(string str)
        {
            int ret = 0;
            for(int i = 0; i < str.length(); i++)
            {
                ret = ret*10 + str[i];
            }
            return ret;
        }
    };

    2ND TRY

    考虑只有一个操作数的情况

    class Solution {
    public:
        int evalRPN(vector<string> &tokens) {
            int operant1;
            int operant2;
            string str;
            int ret;
            bool firstOp = false;
            
            for(int i = 0; i < tokens.size(); i++)
            {
                str = tokens[i];
                if(!firstOp)
                {
                    operant1 = getInt(str);
                    firstOp = true;
                }
                else if(str == "+")
                {
                    operant1 += operant2;
                }
                else if(str == "-")
                {
                    operant1 -= operant2;
                }
                else if(str == "*")
                {
                    operant1 *= operant2;
                }
                else if(str == "/")
                {
                    operant1 /= operant2;
                }
                else
                {
                    operant2 = getInt(str);
                }
            }
            return operant1;
        }
        
        int getInt(string str)
        {
            int ret = 0;
            for(int i = 0; i < str.length(); i++)
            {
                ret = ret*10 + (str[i]-'0');
            }
            return ret;
        }
    };

    Result: Wrong

    Input: ["3","-4","+"]
    Output: -23
    Expected: -1

    3RD TRY

    考虑负数的情况

    class Solution {
    public:
        int evalRPN(vector<string> &tokens) {
            int operant1;
            int operant2;
            int ret;
            string str;
            stack<int> operantStack;
            
            for(int i = 0; i < tokens.size(); i++)
            {
                str = tokens[i];
                if(str == "+")
                {
                    operant2 = operantStack.top();
                    operantStack.pop();
                    operant1 = operantStack.top();
                    operantStack.pop();
                    operantStack.push(operant1 + operant2);
                }
                else if(str == "-")
                {
                    operant2 = operantStack.top();
                    operantStack.pop();
                    operant1 = operantStack.top();
                    operantStack.pop();
                    operantStack.push(operant1 - operant2);
                }
                else if(str == "*")
                {
                    operant2 = operantStack.top();
                    operantStack.pop();
                    operant1 = operantStack.top();
                    operantStack.pop();
                    operantStack.push(operant1 * operant2);
                }
                else if(str == "/")
                {
                    operant2 = operantStack.top();
                    operantStack.pop();
                    operant1 = operantStack.top();
                    operantStack.pop();
                    operantStack.push(operant1 / operant2);
                }
                else
                {
                    operantStack.push(getInt(str));
                }
            }
            return operantStack.top();
        }
        
        int getInt(string str)
        {
            int ret = 0;
            bool negFlag = false;
            for(int i = 0; i < str.length(); i++)
            {
                if(str[i]=='-') negFlag = true;
                else if(negFlag)
                {
                    ret = ret*10 - (str[i]-'0');
                }
                else
                {
                    ret = ret*10 + (str[i]-'0');
                }
            }
            return ret;
        }
    };

    Result: Accepted

    4TH TRY

    使用内置函数atoi将string转换成int

    class Solution {
    public:
        int evalRPN(vector< string > &tokens) {
            stack< int > operandStack;
            int operand1;
            int operand2;
            for(int i = 0; i < tokens.size(); i++){
                if(tokens[i]=="+"){
                    operand1 = operandStack.top();
                    operandStack.pop();
                    operand2 = operandStack.top();
                    operandStack.pop();
                    operand2 += operand1;
                    operandStack.push(operand2);
                }
                else if(tokens[i]=="-"){
                    operand1 = operandStack.top();
                    operandStack.pop();
                    operand2 = operandStack.top();
                    operandStack.pop();
                    operand2 -= operand1;
                    operandStack.push(operand2);
                }
                else if(tokens[i]=="*"){
                    operand1 = operandStack.top();
                    operandStack.pop();
                    operand2 = operandStack.top();
                    operandStack.pop();
                    operand2 *= operand1;
                    operandStack.push(operand2);
                }
                else if(tokens[i]=="/"){
                    operand1 = operandStack.top();
                    operandStack.pop();
                    operand2 = operandStack.top();
                    operandStack.pop();
                    operand2 /= operand1;
                    operandStack.push(operand2);
                }
                else{
                    operand1 = atoi(tokens[i].c_str());
                    operandStack.push(operand1);
                }
            }
            return operandStack.top();
        }
    };

    Result: Accepted

  • 相关阅读:
    HL极大算子弱(1,1)范数趋于无穷, 当维数趋于无穷
    Stein's Maximal principle
    课程: 广义相对论和波方程
    关于球乘子和BochnerRiesz乘子的相关文献
    The Hardy Uncertainty Principle
    Mar. 22 10:0011:30, 1569, "Global wellposedness for the nonlinear Schrodinger equation with derivative in energy space" by Yifei Wu
    Several questions regarding construction of functions
    通知: 强化班<调和分析与PDE>3月26日的课程 改到3月21 晚上6:009:00 地点不变
    ADO.NET Entity Framework 入门示例向导
    JavaScript 定义类方法
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4168335.html
Copyright © 2011-2022 走看看