leetcode--Evaluate Reverse Polish Notation
2016-01-23 19:42
447 查看
题目:https://leetcode.com/problems/evaluate-reverse-polish-notation/
其实中文意思就是根据后缀表达式来求表达式结果!!
解题思路:就是利用栈来实现啦!遇到数字入栈,遇到运算符出栈两个数进行运算!
源代码如下:
小结:
之前未判断除法的时候除数为0的情况,出现错误:Last executed input:
["0","3","/"] 。
这个题本身难度系数不高,只要学过stack的人都会想到,毕竟数据结构的书上有相关的内容,但是细节问题值得注意。
1)vector<string> & tokens这个参数是字符串的容器,里面的运算符均是字符串形式存储 : "+" "-" "*" "/"并非单引号的一个字符,就相当于‘a’代表字符a,但是”a“其实是字符串'a'+'\0'
2) 使用atoi()函数进行字符转为整数时出错,在于atoi()的参数是const char* str,但是tokens却是string类型。
注意,与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*。如果要将string直接转换成const char *类型。string有2个函数可以运用。
一个是.c_str(),一个是data成员函数。
具体关于char* str 和 string 之间的关系见http://blog.csdn.net/cogbee/article/details/8931838
3)刚开始打算用switch结构来对运算符进行判别,但是最后发现在C++中switch的选择因子只能是整数。所以最终转为if---else结构。
4)还要考虑特殊情况,比如这题的分母为0的时候。
其实中文意思就是根据后缀表达式来求表达式结果!!
解题思路:就是利用栈来实现啦!遇到数字入栈,遇到运算符出栈两个数进行运算!
源代码如下:
class Solution { public: int evalRPN(vector<string>& tokens) { stack<int> number; for(int i = 0 ; i < tokens.size();i++) { if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") { int n1 = 0; int n2 = 0; n1 = number.top(); number.pop(); n2 = number.top(); number.pop(); if(tokens[i] == "+") number.push(n1+n2); else if(tokens[i] == "-") number.push(n2-n1); else if(tokens[i] == "*") number.push(n1*n2); else if(tokens[i] == "/") { if(n1 != 0) number.push(n2/n1); } } else { number.push(atoi(tokens[i].c_str())); } } if(!number.empty()) return number.top(); } };
小结:
之前未判断除法的时候除数为0的情况,出现错误:Last executed input:
["0","3","/"] 。
这个题本身难度系数不高,只要学过stack的人都会想到,毕竟数据结构的书上有相关的内容,但是细节问题值得注意。
1)vector<string> & tokens这个参数是字符串的容器,里面的运算符均是字符串形式存储 : "+" "-" "*" "/"并非单引号的一个字符,就相当于‘a’代表字符a,但是”a“其实是字符串'a'+'\0'
2) 使用atoi()函数进行字符转为整数时出错,在于atoi()的参数是const char* str,但是tokens却是string类型。
注意,与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*。如果要将string直接转换成const char *类型。string有2个函数可以运用。
一个是.c_str(),一个是data成员函数。
具体关于char* str 和 string 之间的关系见http://blog.csdn.net/cogbee/article/details/8931838
3)刚开始打算用switch结构来对运算符进行判别,但是最后发现在C++中switch的选择因子只能是整数。所以最终转为if---else结构。
4)还要考虑特殊情况,比如这题的分母为0的时候。
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android上改变listView的选中颜色
- String.intern
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- C#中struct和class的区别详解
- PostgreSQL ERROR: invalid escape string 解决办法
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- 浅谈C++中的string 类型占几个字节
- 标准C++类string的Copy-On-Write技术
- C++实现string存取二进制数据的方法
- C#中string和StingBuilder内存中的区别实例分析
- PHP STRING 陷阱原理说明
- 深入了解PHP类Class的概念
- c#中 String和string的区别介绍
- C#实现的图片、string相互转换类分享