标签:als new etc 遇到 The and inpu war run
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +
, -
, *
, /
. Each operand may be an integer or another expression.
Note:
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
标签:als new etc 遇到 The and inpu war run
原文地址:https://www.cnblogs.com/cnoodle/p/12899749.html