[LeetCode] 150. Evaluate Reverse Polish Notation
Posted CNoodle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 150. Evaluate Reverse Polish Notation相关的知识,希望对你有一定的参考价值。
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +
, -
, *
, /
. Each operand may be an integer or another expression.
Note:
- Division between two integers should truncate toward zero.
- The given RPN expression is always valid. That means the expression would always evaluate to a result and there won\'t be any divide by zero operation.
Example 1:
Input: ["2", "1", "+", "3", "*"] Output: 9 Explanation: ((2 + 1) * 3) = 9Example 2:
Input: ["4", "13", "5", "/", "+"] Output: 6 Explanation: (4 + (13 / 5)) = 6Example 3:
Input: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"] Output: 22 Explanation: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5 = ((10 * (6 / (12 * -11))) + 17) + 5 = ((10 * (6 / -132)) + 17) + 5 = ((10 * 0) + 17) + 5 = (0 + 17) + 5 = 17 + 5 = 22
逆波兰表达式求值。
题意是根据逆波兰表达式的规则求值,思路是用stack。注意到这里的所有计算并不遵循乘除法优先于加减法的原则,而是先遇到什么符号就立马进行计算。
时间O(n)
空间O(n)
Java实现
1 class Solution { 2 public int evalRPN(String[] tokens) { 3 Stack<Integer> stack = new Stack<>(); 4 for (String s : tokens) { 5 if (s.equals("+")) { 6 stack.push(stack.pop() + stack.pop()); 7 } else if (s.equals("-")) { 8 int a = stack.pop(); 9 int b = stack.pop(); 10 stack.push(b - a); 11 } else if (s.equals("*")) { 12 stack.push(stack.pop() * stack.pop()); 13 } else if (s.equals("/")) { 14 int a = stack.pop(); 15 int b = stack.pop(); 16 stack.push(b / a); 17 } else { 18 stack.push(Integer.parseInt(s)); 19 } 20 } 21 return stack.pop(); 22 } 23 }
以上是关于[LeetCode] 150. Evaluate Reverse Polish Notation的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode150. Evaluate Reverse Polish Notation
刷题-LeetCode150 Evaluate Reverse Polish Notation
[LeetCode] 150. Evaluate Reverse Polish Notation
[LeetCode] 150. Evaluate Reverse Polish Notation