zoukankan      html  css  js  c++  java
  • LeetCode150: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

    解题思路:

    很简单的一题,直接利用栈实现,不多说了

    实现代码:

    #include <iostream>
    #include <stack>
    #include <vector>
    #include <string>
    #include <cstdlib> 
    using namespace std;
    
    /*
    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
    */ 
    class Solution {
    public:
        int evalRPN(vector<string> &tokens) {
            stack<string> operand_stack;
            vector<string>::iterator iter;
            for(iter = tokens.begin(); iter != tokens.end(); ++iter)
            {
                if(*iter == "+")//这里就不提取重复代码了,直接简单点 
                {
                    string op1 = operand_stack.top();
                    operand_stack.pop();
                    string op2 = operand_stack.top();
                    operand_stack.pop();
                    //int ret = atoi(op2.c_str()) + atoi(op1.c_str());
                    int ret = stoi(op2) + stoi(op1);//stoi为C++11才有 
                    string result = to_string(ret);
                    operand_stack.push(result);
                    
                }
                else if(*iter == "-")
                {
                    string op1 = operand_stack.top();
                    operand_stack.pop();
                    string op2 = operand_stack.top();
                    operand_stack.pop();
                    int ret = atoi(op2.c_str()) - atoi(op1.c_str());
                    string result = to_string(ret);
                    operand_stack.push(result);
                    
                }
                else if(*iter == "*")
                {
                    string op1 = operand_stack.top();
                    operand_stack.pop();
                    string op2 = operand_stack.top();
                    operand_stack.pop();
                    int ret = atoi(op2.c_str()) * atoi(op1.c_str());
                    string result = to_string(ret);
                    operand_stack.push(result);
                    
                }
                else if(*iter == "/")
                {
                    string op1 = operand_stack.top();
                    operand_stack.pop();
                    string op2 = operand_stack.top();
                    operand_stack.pop();
                    if( atoi(op1.c_str()) == 0)
                        return 0x7FFFFFF;
                    int ret = atoi(op2.c_str()) / atoi(op1.c_str());
                    string result = to_string(ret);
                    operand_stack.push(result);
                    
                }
                else
                    operand_stack.push(*iter);
            }
            return atoi(operand_stack.top().c_str());
        
        }
     
    };
    
    int main(void)
    {
        string strs[] = {"4", "13", "5", "/", "+"};
        vector<string> tokens(strs, strs+5);
        Solution solution;
        int ret = solution.evalRPN(tokens);
        cout<<ret<<endl;
        return 0;
    }
  • 相关阅读:
    NET与Matlab结合 —— 最小二乘法直线拟合(C#)
    C#基础概念二十五问
    C# where子句
    最小二乘法
    蛙蛙推荐:一套.net窗体身份验证方案(解决了防止用户重复登陆,session超时等问题)
    在 ASP.NET 上实现锁定表头、支持滚动的表格的做法
    一个使用泛型的工厂类
    反射技术与设计模式
    ASP.NET实现匿名访问控制
    危险字符过滤的类
  • 原文地址:https://www.cnblogs.com/mickole/p/3669600.html
Copyright © 2011-2022 走看看