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
使用堆来做,遇到数字插入stack,遇到符号则pop两个元素进行运算,然后把结果push进stack。 注意先pop出来的是第二个数字。
1 public class Solution { 2 public int evalRPN(String[] tokens) { 3 Stack<Integer> st = new Stack<Integer>(); 4 for(int i = 0; i < tokens.length; i ++){ 5 if(tokens[i].equals("+")){ 6 int second = Integer.valueOf(st.pop()); 7 int first = Integer.valueOf(st.pop()); 8 st.push(first + second); 9 }else if(tokens[i].equals("-")){ 10 int second = Integer.valueOf(st.pop()); 11 int first = Integer.valueOf(st.pop()); 12 st.push(first - second); 13 }else if(tokens[i].equals("*")){ 14 int second = Integer.valueOf(st.pop()); 15 int first = Integer.valueOf(st.pop()); 16 st.push(first * second); 17 }else if(tokens[i].equals("/")){ 18 int second = Integer.valueOf(st.pop()); 19 int first = Integer.valueOf(st.pop()); 20 st.push((Integer)(first / second)); 21 }else{ 22 st.push(Integer.valueOf(tokens[i])); 23 } 24 } 25 return st.pop(); 26 } 27 }
第二遍:
1 public class Solution { 2 public int evalRPN(String[] tokens) { 3 Stack<Integer> stack = new Stack<Integer>(); 4 for(int i = 0; i < tokens.length; i ++){ 5 if(tokens[i].equals("+")){ 6 stack.push(stack.pop() + stack.pop()); 7 }else if(tokens[i].equals("-")){ 8 int a = stack.pop(); 9 stack.push(stack.pop() - a); 10 }else if(tokens[i].equals("*")){ 11 stack.push(stack.pop() * stack.pop()); 12 }else if(tokens[i].equals("/")){ 13 int a = stack.pop(); 14 stack.push((Integer)(stack.pop() / a)); 15 }else 16 stack.push(Integer.valueOf(tokens[i])); 17 } 18 return stack.pop(); 19 } 20 }
posted on 2013-12-03 14:18 Step-BY-Step 阅读(163) 评论(0) 编辑 收藏 举报