LeetCode:150. Evaluate Reverse Polish Notation(逆波兰表达式)
2016-07-29 17:18
501 查看
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:
参考:
http://blog.csdn.net/soszou/article/details/37054503
思路:由于逆波兰表达式本身不需要括号来限制哪个运算该先进行,因此可以直接利用栈来模拟计算:遇到操作数直接压栈,碰到操作符直接取栈顶的2个操作数进行计算(注意第一次取出来的是右操作数),然后再把计算结果压栈,如此循环下去。最后栈中剩下的唯一一个元素便是整个表达式的值。
https://leetcode.com/problems/evaluate-reverse-polish-notation/
如果JDK是1.7之前的,switch是不支持String的
注:2016/7/29 的LeetCode是可以通过的
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
参考:
http://blog.csdn.net/soszou/article/details/37054503
思路:由于逆波兰表达式本身不需要括号来限制哪个运算该先进行,因此可以直接利用栈来模拟计算:遇到操作数直接压栈,碰到操作符直接取栈顶的2个操作数进行计算(注意第一次取出来的是右操作数),然后再把计算结果压栈,如此循环下去。最后栈中剩下的唯一一个元素便是整个表达式的值。
https://leetcode.com/problems/evaluate-reverse-polish-notation/
/** * ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 * ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6 */ public class EvaluateReversePolishNotation { public static void main(String[] args) { String[] test1 = {"2", "1", "+", "3", "*"}; String[] test2 = {"4", "13", "5", "/", "+"}; System.out.println(ovalRPN(test1)); System.out.println(ovalRPN(test2)); } public static int ovalRPN(String[] tokens) { int returnValue = 0; String operators = "+-*/"; Stack<String> stack = new Stack<String>(); for (String t : tokens) { // 如果不是运算符(即如果是数字) if (!operators.contains(t)) { // 把数字压栈 stack.push(t); } else { // 如果是运算符 // 把数字弹栈 // 栈中的元素为String,需转换 int a = Integer.valueOf(stack.pop()); int b = Integer.valueOf(stack.pop()); switch (t) { case "+": stack.push(String.valueOf(a + b)); break; case "-": stack.push(String.valueOf(b - a)); break; case "*": stack.push(String.valueOf(a * b)); break; case "/": stack.push(String.valueOf(b / a)); break; } } } returnValue = Integer.valueOf(stack.pop()); return returnValue; } }
如果JDK是1.7之前的,switch是不支持String的
注:2016/7/29 的LeetCode是可以通过的
/** * ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 * ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6 */ /** * * if JDK before 1.7 * * switch does not support String * */ public class EvaluateReversePolishNotationBefore { public static void main(String[] args) { String[] test1 = {"2", "1", "+", "3", "*"}; String[] test2 = {"4", "13", "5", "/", "+"}; System.out.println(evalRPN(test1)); System.out.println(evalRPN(test2)); } public static int evalRPN(String[] tokens) { int returnValue = 0; String operators = "+-*/"; Stack<String> stack = new Stack<String>(); for (String t : tokens) { // 如果不是运算符(即如果是数字) if (!operators.contains(t)) { // 将数字压栈 stack.push(t); } else { // 如果是运算符 // 将栈中的两个数字弹栈 // 栈中的元素为String, 需转换 // 这里注意栈是后进先出 int a = Integer.valueOf(stack.pop()); int b = Integer.valueOf(stack.pop()); // 更改的地方 int index = operators.indexOf(t); switch (index) { case 0: stack.push(String.valueOf(a + b)); break; case 1: stack.push(String.valueOf(b - a)); break; case 2: stack.push(String.valueOf(a * b)); break; case 3: stack.push(String.valueOf(b / a)); break; } // switch (t) { // case "+": // stack.push(String.valueOf(a + b)); // break; // case "-": // stack.push(String.valueOf(b - a)); // break; // case "*": // stack.push(String.valueOf(a * b)); // break; // case "/": // stack.push(String.valueOf(b / a)); // break; // } } } returnValue = Integer.valueOf(stack.pop()); return returnValue; } }
相关文章推荐
- Leetcode刷题记——150. Evaluate Reverse Polish Notation(计算逆波兰表达式)
- LeetCode-150. Evaluate Reverse Polish Notation (JAVA)逆波兰表达式求值
- [Leetcode] evaluate reverse polish notation 计算逆波兰表达式
- leetcode_2 Evaluate Reverse Polish Notation 逆波兰表达式
- [Leetcode] Evaluate Reverse Polish Notation 逆波兰表达式
- [LeetCode] Evaluate Reverse Polish Notation 计算逆波兰表达式
- 【LeetCode】Evaluate Reverse Polish Notation(逆波兰表达式求值) -(Linkedin) Medium ++
- Leetcode 150 Evaluate Reverse Polish Notation (求值逆波兰表达式)
- 【LeetCode刷题Java版】Evaluate Reverse Polish Notation(计算逆波兰表达式)
- 150. Evaluate Reverse Polish Notation(逆波兰表达式)
- Leetcode 150:Evaluate Reverse Polish Notation(计算逆波兰表达式) --java实现
- leetcode Evaluate Reverse Polish Notation(计算逆波兰表达式)
- [leetcode] 150.Evaluate Reverse Polish Notation
- java常用算法之逆波兰表达式(Evaluate Reverse Polish Notation)
- LeetCode *** 150. Evaluate Reverse Polish Notation
- [LeetCode]Evaluate Reverse Polish Notation(逆波兰式的计算)
- 【LintCode】Evaluate Reverse Polish Notation 逆波兰表达式求值
- 逆波兰表达式求值(Evaluate Reverse Polish Notation)
- leetcode 150. Evaluate Reverse Polish Notation
- 【LeetCode-面试算法经典-Java实现】【150-Evaluate Reverse Polish Notation(计算逆波兰式)】