栈-E682-棒球比赛

2019-03-19  本文已影响0人  三次元蚂蚁

题目

  1. 整数:直接表示本回合积分,范围为[-30000, 30000]
  2. “+”:本轮积分为前两回合积分的和
  3. “D”:本轮积分为前一回合积分的两倍
  4. “C”:移除前一回合获得的积分

"C"以及被"C"操作移除的回合都不算作回合

思路

  1. 由于该问题需要频繁操作前一回合或前两回合的数据,所以选用栈这种数据结构

  2. 依次执行每个字符串所代表的操作:

  1. 出栈直到栈为空并累加求和

代码

class Solution {
    public int calPoints(String[] ops) {
        LinkedList<Integer> stack = new LinkedList<>();
        
        int num, temp;
        for (String op : ops) {
            switch (op) {
                case "+":
                    temp = stack.pop();
                    num = temp + stack.peek();
                    stack.push(temp);
                    stack.push(num);
                    break;
                case "D":
                    stack.push(stack.peek() * 2);
                    break;
                case "C":
                    stack.pop();
                    break;
                default:
                    stack.push(Integer.valueOf(op));
                    break;
            }
        }
        
        int result = 0;
        while (!stack.isEmpty()) {
            result += stack.pop();
        }
        
        return result;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读