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

注意:一定要使用后出栈的操作数作为第一操作数,否则,对于没有对称操作的操作符会出错。

 C++实现代码:

#include<iostream>
#include<stack>
#include<vector>
#include<string>
#include<cstdlib>
using namespace std;

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

int main()
{
    Solution s;
    vector<string> vec={"4","13","5","/","+"};
    cout<<s.evalRPN(vec)<<endl;
}

 

时间: 2024-09-24 06:47:16

Evaluate Reverse Polish Notation的相关文章

[LeetCode 第4题] -- Evaluate Reverse Polish Notation

题目链接: Evaluate Reverse Polish Notation 题目意思: 给的一个表达式,求值 代码: class Solution { public: bool IsOperator(const string &str); int GetStackTop(stack<int> &stack); int evalRPN(vector<string> &tokens); }; bool Solution::IsOperator(const st

[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", "*"] -&g

LeetCode总结【转】

转自:http://blog.csdn.net/lanxu_yy/article/details/17848219 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近完成了www.leetcode.com的online judge中151道算法题目.除各个题目有特殊巧妙的解法以外,大部分题目都是经典的算法或者数据结构,因此做了如下小结,具体的解题思路可以搜索我的博客:LeetCode题解 题目 算法 数据结构 注意事项 Clone Graph BFS 哈希表 Word Ladder II

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能

UVa 11234 Expressions:二叉树重建&amp;amp;由叶往根的层次遍历

11234 - Expressions Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2175 Arithmetic expressions are usually written with the operators in between the two operands (which

24点扑克牌游戏的算法实现

二十四点扑克牌游戏大概所有人都玩过,规则非常简单,随机抽出四张牌,由1到9中的数字组成(当然也可以扩展到任意整数),然后利用加减乘除以及括号组成一个算术表达式,计算这个表达式的结果是否能够为24(或任意整数).看到这个题的第一反应就是利用穷举法来做,也就是建立一个搜索树,把所有的可能枚举出来,然后检查每种可能是否结果可以为24.基于这种思想,我们可以把问题分成三个步骤: 首先可以列出4个整数的所有排列,也就是求集合中元素的所有排列的问题,眼熟了吧?相信很多人都看过这个问题,一般的方式是用函数的递

C#算术表达式求值

算术表达式求值是一个经典的问题,很多学习编程的人都对此不陌生.本来我并不想写一个算术表达式求值的算法.在网上我看到了一篇文章,名叫<快速精确的对数学表达式求值>( http://www-128.ibm.com/developerworks/cn/java/j-w3eva/ ).才有兴趣着一个玩玩.写来写去,觉得真得很经典.所以把我写的代码拿出来让大家看看吧.因为时间较紧.所以变量名没有做得很规范. w3eavl是用JAVA写得,我用C#把它重写了一下.基本上能用,只是三角函数/反三角函数/双曲

javascript中解析四则运算表达式的算法和示例_javascript技巧

在编写代码时我们有时候会碰到需要自己解析四则运算表达式的情况,本文简单的介绍使用JavaScript实现对简单四则运算表达式的解析. 一.熟悉概念 中缀表示法(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4).也就是我们最常用的算术表达式,中缀表达式对于人类来说比较容易理解,但是不易于计算机解析. 逆波兰表示法(Reverse Polish notation,RPN,或逆波兰记法),是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式

Clojure - 基本语法

Installing Clojure Clojure is an open-source project hosted at github.com. git clone https://github.com/clojure/clojure.git This will download the code from the master branch into the clojure directory in your workspace. Clojure is a Java project, an