【LeetCode】150 Evaluate Reverse Polish Notation 小侃小解
2015-11-25 13:44
656 查看
Difficulty: Medium
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:
小侃:
这题先搞明白什么是RPN,就是后置算式,还算好心啦,举了俩例子,就算不会RPN看例子也能懂,然后实际过程就跟例子说的一样 2 1 + 等与 2+1, 但是例子第二行给了更高级的例子,然后就能推出,找到第一个运算符号,然后取出最前面的两个数,然后算结果,然后找下一个运算符号,然后拿上一个结果并且再往前找另一个数。这个就是规律啦。然后我首先想到的方法,找到一个能后进先出的存储方式,然后从头开始读,每看到一个数就扔进去,然后看到一个符号就往出拿俩数算,然后把结果算好了放进去,接着往下读。以此类推。
可是,这个存储方式我就记得叫堆(stack),然后至于怎么用,干嘛用,忘却了。。。好吧,回忆什么是stack,什么是queue。。。
以下就是我这次新学的啦:
特别感谢:http://www.jb51.net/article/44645.htm 写的stack简易易懂!
stack 是一种后进先出的存储方式 LIFO(Last
In,Frist Out)。
A. 新建stack:
java.util.Stack<String> stack = new java.util.Stack<String>();
B. 放东西进stack:
stack.push("c"); // 比如说已经有了 a,b 那这次push之后就变成了a,b,c
C. 取东西从stack:
Sring value = stack.pop(); // 还比如说现在有 a,b在里面,那这次取出的就是b,value
= b
D. 我就看看最后一个是啥,我不取:
String value = stack.peek(); //
还比如说现在有 a,b在里面,那这次value=b, 但是b还在stack里面
E. 查看是否为空:
Stack.empty(); // 还有就return true,没有就return false。
F. 如果你想枚举:
Enumeration items = stack.elements();
G. 如果你想查找:
int distance = stack.search(a) ;//注意,这个回的是距离,还是a,b的例子,那这个distance就是2
我能找到的我觉得跟stack相关有用的就这么多啦,足够做这道题啦~
小侃就到这里~
小解:
<span style="font-size:18px;">public class Solution {
public int evalRPN(String[] tokens) {
if (tokens == null){
return 0;
}
if (tokens.length < 2){
return Integer.valueOf(tokens[0]);
}
Stack<String> stack = new Stack<String>();
int result = 0;
String op = "+-*/";
for (String str : tokens){
if (!op.contains(str)){
stack.push(str);
}else{
if(!stack.empty()){
int B = Integer.valueOf(stack.pop());
if(!stack.empty()){
int A = Integer.valueOf(stack.pop());
switch(str){
case "+" : stack.push(A+B+"");break;
case "-" : stack.push(A-B+"");break;
case "*" : stack.push(A*B+"");break;
case "/" : stack.push(A/B+"");break;
}
}
}
}
}
result = Integer.valueOf(stack.pop());
return result;
}
}</span>
小结:
可惜只打败了5%的人,所以肯定有哪里写的效率不好,唯一好处是直接,所以不难记。。
其实。。我一直有一点点犹豫,因为我并没有handle exception,我就很奇怪如果给一个错的input,比如给一对数然后没有符号怎么办,虽然最后妥协在题里说,给定的RPN公式。。。所以假定没有错。。先到这里吧~
不是最优解,拍砖请轻拍~然后拍完记得告诉我更好的办法呦~
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
小侃:
这题先搞明白什么是RPN,就是后置算式,还算好心啦,举了俩例子,就算不会RPN看例子也能懂,然后实际过程就跟例子说的一样 2 1 + 等与 2+1, 但是例子第二行给了更高级的例子,然后就能推出,找到第一个运算符号,然后取出最前面的两个数,然后算结果,然后找下一个运算符号,然后拿上一个结果并且再往前找另一个数。这个就是规律啦。然后我首先想到的方法,找到一个能后进先出的存储方式,然后从头开始读,每看到一个数就扔进去,然后看到一个符号就往出拿俩数算,然后把结果算好了放进去,接着往下读。以此类推。
可是,这个存储方式我就记得叫堆(stack),然后至于怎么用,干嘛用,忘却了。。。好吧,回忆什么是stack,什么是queue。。。
以下就是我这次新学的啦:
特别感谢:http://www.jb51.net/article/44645.htm 写的stack简易易懂!
stack 是一种后进先出的存储方式 LIFO(Last
In,Frist Out)。
A. 新建stack:
java.util.Stack<String> stack = new java.util.Stack<String>();
B. 放东西进stack:
stack.push("c"); // 比如说已经有了 a,b 那这次push之后就变成了a,b,c
C. 取东西从stack:
Sring value = stack.pop(); // 还比如说现在有 a,b在里面,那这次取出的就是b,value
= b
D. 我就看看最后一个是啥,我不取:
String value = stack.peek(); //
还比如说现在有 a,b在里面,那这次value=b, 但是b还在stack里面
E. 查看是否为空:
Stack.empty(); // 还有就return true,没有就return false。
F. 如果你想枚举:
Enumeration items = stack.elements();
G. 如果你想查找:
int distance = stack.search(a) ;//注意,这个回的是距离,还是a,b的例子,那这个distance就是2
我能找到的我觉得跟stack相关有用的就这么多啦,足够做这道题啦~
小侃就到这里~
小解:
<span style="font-size:18px;">public class Solution {
public int evalRPN(String[] tokens) {
if (tokens == null){
return 0;
}
if (tokens.length < 2){
return Integer.valueOf(tokens[0]);
}
Stack<String> stack = new Stack<String>();
int result = 0;
String op = "+-*/";
for (String str : tokens){
if (!op.contains(str)){
stack.push(str);
}else{
if(!stack.empty()){
int B = Integer.valueOf(stack.pop());
if(!stack.empty()){
int A = Integer.valueOf(stack.pop());
switch(str){
case "+" : stack.push(A+B+"");break;
case "-" : stack.push(A-B+"");break;
case "*" : stack.push(A*B+"");break;
case "/" : stack.push(A/B+"");break;
}
}
}
}
}
result = Integer.valueOf(stack.pop());
return result;
}
}</span>
小结:
可惜只打败了5%的人,所以肯定有哪里写的效率不好,唯一好处是直接,所以不难记。。
其实。。我一直有一点点犹豫,因为我并没有handle exception,我就很奇怪如果给一个错的input,比如给一对数然后没有符号怎么办,虽然最后妥协在题里说,给定的RPN公式。。。所以假定没有错。。先到这里吧~
不是最优解,拍砖请轻拍~然后拍完记得告诉我更好的办法呦~
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统