Evaluate Reverse Polish Notation【leetcode 2】
来源:互联网 发布:淘宝怎么防举报防排查 编辑:程序博客网 时间:2024/06/06 17:12
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
不断的压栈弹栈就可以了,不过有几个小地方需要学习一下。
1. atoi函数:把字符串转换成整型数。ASCII to integer 的缩写。
原型:
int atoi(const char *nptr);
参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。
头文件: #include <stdlib.h>
2. c_str()函数
string.c_str是Borland封装的String类中的一个函数,它返回当前字符串的首字符地址。
3.考虑压栈的顺序,如a/b和a-b操作,先弹出的是b,后弹出的是a ,注意顺序
代码:
#include <iostream>#include <cstring>#include <vector.h>#include <stack.h>using namespace std;//["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9//["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6int evalRPN(vector<string> & tokens ){stack<int> op;int s = tokens.size();//vector<string>::iterator iter = tokens.begin();//迭代器int a ,b;for(int i=0;i<s;i++){if(tokens[i] == "+"){a = op.top();op.pop();b = op.top();op.pop();op.push(a+b);}else //之前没有这个else就有问题if(tokens[i] == "-"){a = op.top();op.pop();b = op.top();op.pop();op.push(b-a);}else//之前没有这个else就有问题if(tokens[i] == "*"){a = op.top();op.pop();b = op.top();op.pop();op.push(a*b);}else//之前没有这个else就有问题if(tokens[i] == "/"){a = op.top();op.pop();b = op.top();op.pop();op.push(b/a); //different}else{// is a numberop.push(atoi(tokens[i].c_str()));//这里之前用迭代器做,就这个位置中出错//op.push(atoi(*iter.c_str())); //error}}return op.top(); }int main() {vector<string> s ;s.push_back("2");s.push_back("1");s.push_back("+");s.push_back("3");s.push_back("*");cout<<evalRPN(s);return 0;}
输出: 9
0 0
- LeetCode problem 2: Evaluate Reverse Polish Notation
- [LeetCode] Evaluate Reverse Polish Notation [2]
- LeetCode 2 Evaluate Reverse Polish Notation
- LeetCode 2 Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation【leetcode 2】
- Evaluate Reverse Polish Notation | leetcode
- leetcode-Evaluate Reverse Polish Notation
- Leetcode: Evaluate Reverse Polish Notation
- LeetCode - Evaluate Reverse Polish Notation
- LeetCode | Evaluate Reverse Polish Notation
- Leetcode: Evaluate Reverse Polish Notation
- Leetcode: Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation (LeetCode)
- leetcode: Evaluate Reverse Polish Notation
- Leetcode Evaluate Reverse Polish Notation
- [LeetCode] Evaluate Reverse Polish Notation
- [LeetCode] Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation -- LeetCode
- EditText 边框
- New start
- 关于软中断原理,以及中断栈的概念等
- 有关C++模板(template)的编译错误“error LNK2019: 无法解析的外部符号”的分析
- mysqldump和source使用
- Evaluate Reverse Polish Notation【leetcode 2】
- Android--startActivityLocked
- svn提交静态库文件
- 第十八天-Java_IO
- hdu 5007 Post Robot(水题)
- jquery 图片旋转 rotate
- ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
- github 分支管理
- HDU1044 Collect More Jewels