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
计算逆波兰表达式,使用一个栈来存储操作数字,遍历输入的链表。
如果为数字,直接push到栈内,如果为操作符号,就把栈顶的两个元素pop出来运算一下。
运算的结果push到栈内。
public class Solution { public int evalRPN(String[] tokens) { int result = 0; Stack<Integer> stack = new Stack<Integer>(); String operators = "+-*/"; for(int i=0; i<tokens.length;i++){ if (operators.contains(tokens[i])){ int b = stack.pop(); int a = stack.pop(); stack.push(calculate(a,b,tokens[i])); }else{ stack.push(Integer.valueOf(tokens[i])); } } result = stack.pop(); return result; } public int calculate(int a, int b, String operator){ char op = operator.charAt(0); switch (op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return a / b; } return 0; } }