返回

LeetCode 682 棒球比赛,别被特殊规则吓到了

前端

LeetCode 682:棒球比赛

题目

你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。

特殊赛制规则:

  • 一支球队在一个回合中可以获得 1、2 或 3 分,或者什么分都没有得。
  • 如果一支球队在一个回合中得分为 0,则这个回合结束,下一支球队开始一个新回合。
  • 如果一支球队在一个回合中获得恰好 1 分,则这个回合结束,下一支球队延续当前回合。
  • 如果一支球队在一个回合中获得恰好 2 分,则这个回合结束,下一支球队延续当前回合,并且将上一个回合的得分加到本回合的得分上。
  • 如果一支球队在一个回合中获得恰好 3 分,则这个回合结束,下一支球队延续当前回合,并且将上两个回合的得分都加到本回合的得分上。
  • 如果一支球队在一个回合中获得恰好 4 分,则这个回合结束,下一支球队开始一个新回合。

输入:

输入是一个字符串数组 ops,其中 ops[i] 可以是字符串 "1"、"2"、"3"、"4" 或 "out"。

  • "1"、"2"、"3" 和 "4" 表示球队在本回合中获得 1、2、3 或 4 分。
  • "out" 表示球队在本回合中没有得分。

输出:

返回一个整数数组,其中每个元素表示球队在整个比赛中获得的总得分。

示例:

示例 1:

输入:ops = ["5","-2","4","C","D","9","+"]
输出:[27,12,28]
解释:
- 5 分: 记录 [5]
- -2 分:记录 [5,-2]
- 4 分:记录 [5,-2,4]
- C(取消):记录 [5,-2]
- D(双倍):记录 [5,-2,4,-2]
- 9 分:记录 [5,-2,4,-2,9]
- +(加倍):记录 [5,-2,4,-2,9,9]
最终得分:[5, -2, 4, -2, 9, 9] => [27, 12, 28]

示例 2:

输入:ops = ["1"]
输出:[1]

示例 3:

输入:ops = ["1","1","1","1","1"]
输出:[5]

题解:

这道题目乍一看可能会让人摸不着头脑,但其实它的本质就是一个模拟题。我们只需要按照规则,一步一步地模拟出比赛的过程,就能得到最终的得分。

我们可以使用一个栈来保存比赛的得分记录。当一支球队在一个回合中得分时,我们就将得分压入栈中。如果一支球队在一个回合中没有得分,我们就将栈顶的得分弹出。如果一支球队在一个回合中获得 2 分或 3 分,我们就将上一个回合或上两个回合的得分也弹出,并将其加到当前回合的得分中。

下面是代码实现:

class Solution {
    public int[] calPoints(String[] ops) {
        Stack<Integer> stack = new Stack<>();
        for (String op : ops) {
            if ("+".equals(op)) {
                int top = stack.pop();
                int secondTop = stack.pop();
                stack.push(secondTop);
                stack.push(top);
                stack.push(top + secondTop);
            } else if ("D".equals(op)) {
                stack.push(stack.peek() * 2);
            } else if ("C".equals(op)) {
                stack.pop();
            } else {
                stack.push(Integer.valueOf(op));
            }
        }
        int[] res = new int[stack.size()];
        for (int i = stack.size() - 1; i >= 0; i--) {
            res[i] = stack.pop();
        }
        return res;
    }
}

总结:

LeetCode 682 棒球比赛这道题目考察的是我们对规则的理解和代码实现能力。通过使用栈来模拟比赛过程,我们可以轻松地解决这道题目。希望这篇文章能对你有所帮助!