leetcode->Evaluate Reverse Polish Notation
2014-07-23 10:43
507 查看
每天一刷,强迫学习
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:
很容易看出这是一个压栈出栈的问题。思路:
1、输入为字符串,由于有+-*/的存在,栈本身也应该是字符串。由于数组不方便增加删除,因此用ArrayList,动态数组;
2、输入如果为“数字”,则将该“数字”添加到ArrayList中,如果为加减乘除则从ArrayList中取出最后两个字符串并删除,转化为数字后计算值,将值重新压入ArrayList;
3、测试,不通过,提示用例为只有一个数字时返回错误。检查发现return的是计算后的value,当只有一个数字输入时只有压栈没有出栈,因此错误。正确的做法是返回ArrayList中的值。
总结:
1、如果网站没给出测试用例的话,可能debug的要吐血才能发现这个问题。写测试用例考虑边界情况确实是一门学问。
2、用C写比较麻烦,因为没有动态数组,需自己写一个带指针的数组数组,指向当前的栈的位置。可以考虑下如何写。
public class Solution {
public int evalRPN(String[] tokens) {
final String expression ="+-*/";
int value = 0;
int index = -1;
List<String> list = new ArrayList<String>();
for(String s: tokens){
index = expression.indexOf(s);
if(index < 0){
list.add(s);
}else{
switch (index) {
case 0:value = Integer.parseInt(list.get(list.size()-2))
+Integer.parseInt(list.get(list.size()-1));
break;
case 1:value = Integer.parseInt(list.get(list.size()-2))
-Integer.parseInt(list.get(list.size()-1));
break;
case 2:value = Integer.parseInt(list.get(list.size()-2))
*Integer.parseInt(list.get(list.size()-1));
break;
case 3:value = Integer.parseInt(list.get(list.size()-2))
/Integer.parseInt(list.get(list.size()-1));
break;
default:
break;
}
list.remove(list.size()-1);
list.remove(list.size()-1);
list.add(String.valueOf(value));
}
index = -1;
}
return Integer.valueOf(list.get(0));
}
}
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、输入为字符串,由于有+-*/的存在,栈本身也应该是字符串。由于数组不方便增加删除,因此用ArrayList,动态数组;
2、输入如果为“数字”,则将该“数字”添加到ArrayList中,如果为加减乘除则从ArrayList中取出最后两个字符串并删除,转化为数字后计算值,将值重新压入ArrayList;
3、测试,不通过,提示用例为只有一个数字时返回错误。检查发现return的是计算后的value,当只有一个数字输入时只有压栈没有出栈,因此错误。正确的做法是返回ArrayList中的值。
总结:
1、如果网站没给出测试用例的话,可能debug的要吐血才能发现这个问题。写测试用例考虑边界情况确实是一门学问。
2、用C写比较麻烦,因为没有动态数组,需自己写一个带指针的数组数组,指向当前的栈的位置。可以考虑下如何写。
public class Solution {
public int evalRPN(String[] tokens) {
final String expression ="+-*/";
int value = 0;
int index = -1;
List<String> list = new ArrayList<String>();
for(String s: tokens){
index = expression.indexOf(s);
if(index < 0){
list.add(s);
}else{
switch (index) {
case 0:value = Integer.parseInt(list.get(list.size()-2))
+Integer.parseInt(list.get(list.size()-1));
break;
case 1:value = Integer.parseInt(list.get(list.size()-2))
-Integer.parseInt(list.get(list.size()-1));
break;
case 2:value = Integer.parseInt(list.get(list.size()-2))
*Integer.parseInt(list.get(list.size()-1));
break;
case 3:value = Integer.parseInt(list.get(list.size()-2))
/Integer.parseInt(list.get(list.size()-1));
break;
default:
break;
}
list.remove(list.size()-1);
list.remove(list.size()-1);
list.add(String.valueOf(value));
}
index = -1;
}
return Integer.valueOf(list.get(0));
}
}
相关文章推荐
- 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 150 — Evaluate Reverse Polish Notation(C++ Java Python)
- LeetCode: Evaluate Reverse Polish Notation
- python整除问题-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
- leetcode_Evaluate Reverse Polish Notation
- 【LeetCode with Python】 Evaluate Reverse Polish Notation
- [Leetcode] Evaluate Reverse Polish Notation (Java)
- leetcode: Evaluate Reverse Polish Notation
- [leetcode]Evaluate Reverse Polish Notation
- Leetcode: Evaluate Reverse Polish Notation
- [LeetCode] Evaluate Reverse Polish Notation