leetCode-逆波兰表达式求值

开始刷leetCode, 算法一直没有努力学习过, 以后不管是否能用到, 作为一个计算机专业的, 还是补一下课吧.

  • 计算一个逆波兰数学表达式(操作数在前面,操作符在后面)的值, 这类题目当年在学编译原理的时候应该会遇到;

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

  • 思路: 用一个栈来存操作数, 遇到一个操作符就取出两个操作数进行计算, 将计算结果再放进操作数栈中.

<code>
class Solution {
public:
int evalRPN(vector<string> &tokens) {
vector<int> opNumberVector;
for(int i=0;i<tokens.size();i++){
if(tokens[i]=="+")
{
int a=opNumberVector.back();
opNumberVector.pop_back();
int b=opNumberVector.back();
opNumberVector.pop_back();
int r=a+b;
opNumberVector.push_back(r);
}
else if(tokens[i]=="-")
{
int a=opNumberVector.back();
opNumberVector.pop_back();
int b=opNumberVector.back();
opNumberVector.pop_back();
int r=b-a;
opNumberVector.push_back(r);
}
else if(tokens[i]=="")
{
int a=opNumberVector.back();
opNumberVector.pop_back();
int b=opNumberVector.back();
opNumberVector.pop_back();
int r=a
b;
opNumberVector.push_back(r);
}
else if(tokens[i]=="/")
{
int a=opNumberVector.back();
opNumberVector.pop_back();
int b=opNumberVector.back();
opNumberVector.pop_back();
int r=b/a;
opNumberVector.push_back(r);
}
else//numbers
{
opNumberVector.push_back(atoi(tokens[i].c_str()));
}

    }
    return opNumberVector[0];
}

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,799评论 0 11
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,635评论 0 17
  • 要走了,再见
    圣瑾阅读 144评论 0 0
  • 五月的校园像一幅美轮美奂的图画。走在干净整洁的林荫道上,扑鼻而来的有树木清甜的气息,有鲜花醉人的芬芳,更有一种知识...
    花开缘梦阅读 778评论 2 1