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

  • 相关阅读:
    Nginx安装及配置
    nginx主(子)配置文件参考
    harbor私有仓库部署
    k8s内网安装部署(二)
    k8s部署之系统初始化(一)
    redis部署安装【建议收藏】
    nginx优化【收藏篇】
    nginx之用户验证配置(实操)
    nginx反向代理和负载均衡《实战》
    nginx安装
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4168335.html
Copyright © 2011-2022 走看看