[Leetcode] 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.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
Solution:
public class Solution { public int evalRPN(String[] tokens) { if(tokens==null) return 0; Stack<Integer> s=new Stack<Integer>(); for(int i=0;i<tokens.length;++i){ if(isNumber(tokens[i])){ s.add(Integer.parseInt(tokens[i])); }else{ int param_1=s.pop(); int param_2=s.pop(); s.add(calc(param_1,param_2,tokens[i])); } } return s.pop(); } private int calc(int param_1, int param_2, String op) { // TODO Auto-generated method stub switch (op.charAt(0)) { case '+': return param_1+param_2; case '-': return param_2-param_1; case '*': return param_1*param_2; case '/': return param_2/param_1; default: return 0; } } private boolean isNumber(String s) { // TODO Auto-generated method stub try { int i_s=Integer.parseInt(s); } catch (Exception e) { // TODO: handle exception return false; } return true; } }
需要注意:
判断是不是数字:
1 private boolean isNumber(String s) { 2 // TODO Auto-generated method stub 3 try { 4 int i_s=Integer.parseInt(s); 5 } catch (Exception e) { 6 // TODO: handle exception 7 return false; 8 } 9 return true; 10 }