题目
思路
用栈实现数字的运算
用switch-case语句对符号进行不同的操作处理
用Stack下的get()方法实现取出栈内第任意个数字
注意:
此题不能用ArrayDeque实现栈,如果用ArrayDeque话,对于符号 ‘+’ 的操作比较复杂,因为出栈以后还需要将运算式子项重新返回栈才能再将运算结果压栈。
API
一般栈的实现通过接口Deque实现,但是这道题中需要使用到Stack下的get()方法,即通过下标获取栈内元素,所以用Stack类实现。
用正则表达式取出正数,对于负数,我们可以不用正则表达式,直接用String下的charAt()方法获取第一个字符位置的符号,如果是 ‘-’ 那么就判定为负数进行压栈处理。
class Solution { public int calPoints(String[] operations) { int result=0; Stack<Integer> stack = new Stack<>(); for(String s : operations){ //使用正则表达式取出数字 if(s.charAt(0)=='-'){ int num = Integer.parseInt(s); stack.push(num); result += num; }else if(s.matches("\\d+")){ int num = Integer.parseInt(s); stack.push(num); result += num; }else{ switch(s){ case "C": result -= stack.pop(); break; case "D": int num = stack.peek()*2; stack.push(num); result += num; break; case "+": int rs = stack.get(stack.size()-1)+stack.get(stack.size()-2); stack.push(rs); result+=rs; break; } } } return result; } }