Leetcode 150. Evaluate Reverse Polish Notation
不定期更新leetcode解题java答案。
采用pick one的方式选择题目。
题意为给定类似树结构运算符后缀的计算序列,返回计算结果。
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
可看出后进数字先计算,采用栈来储存数字,出现运算符则出栈运算,并将运算后的结果再次放入栈中,最后的运算结束时,栈中存留一个值为计算结果。
代码如下:
1 public class Solution { 2 public int evalRPN(String[] tokens) { 3 Stack<Integer> stack = new Stack(); 4 for(int i = 0; i < tokens.length; i++){ 5 if(tokens[i].charAt(tokens[i].length() - 1) >= '0' && tokens[i].charAt(tokens[i].length() - 1) <= '9') 6 stack.push(Integer.parseInt(tokens[i])); 7 else{ 8 int num2 = stack.pop(); 9 int num1 = stack.pop(); 10 stack.push(calculate(num1, num2, tokens[i])); 11 } 12 } 13 return stack.pop(); 14 } 15 16 public int calculate(int num1, int num2, String str){ 17 if(str.equals("+")) 18 return num1 + num2; 19 else if(str.equals("-")) 20 return num1 - num2; 21 else if(str.equals("*")) 22 return num1 * num2; 23 else 24 return num1 / num2; 25 } 26 }