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;
    }
  • 相关阅读:
    CentOS 下安装apt-get
    Centos 6.5升级到Git2.1.2的步骤
    JAVA常识积累
    Android网络编程概述
    解读ClassLoader
    android ndk调用OpenGL 实现纹理贴图Texture
    android Bind机制(二)
    Android Binder机制原理(史上最强理解,没有之一)(转)
    NDK常见问题
    根因分析初探:一种报警聚类算法在业务系统的落地实施
  • 原文地址:https://www.cnblogs.com/mickole/p/3669600.html
Copyright © 2011-2022 走看看