美文网首页
棒球比赛

棒球比赛

作者: Tank_Mao | 来源:发表于2021-01-29 17:18 被阅读0次

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

比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:

整数 x - 表示本回合新获得分数 x
"+" - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
"D" - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
"C" - 表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。

请你返回记录中所有得分的总和。

示例 1:

输入:ops = ["5","2","C","D","+"]
输出:30
解释:
"5" - 记录加 5 ,记录现在是 [5]
"2" - 记录加 2 ,记录现在是 [5, 2]
"C" - 使前一次得分的记录无效并将其移除,记录现在是 [5].
"D" - 记录加 2 * 5 = 10 ,记录现在是 [5, 10].
"+" - 记录加 5 + 10 = 15 ,记录现在是 [5, 10, 15].
所有得分的总和 5 + 10 + 15 = 30

示例 2:

输入:ops = ["5","-2","4","C","D","9","+","+"]
输出:27
解释:
"5" - 记录加 5 ,记录现在是 [5]
"-2" - 记录加 -2 ,记录现在是 [5, -2]
"4" - 记录加 4 ,记录现在是 [5, -2, 4]
"C" - 使前一次得分的记录无效并将其移除,记录现在是 [5, -2]
"D" - 记录加 2 * -2 = -4 ,记录现在是 [5, -2, -4]
"9" - 记录加 9 ,记录现在是 [5, -2, -4, 9]
"+" - 记录加 -4 + 9 = 5 ,记录现在是 [5, -2, -4, 9, 5]
"+" - 记录加 9 + 5 = 14 ,记录现在是 [5, -2, -4, 9, 5, 14]
所有得分的总和 5 + -2 + -4 + 9 + 5 + 14 = 27

示例 3:

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

提示:

1 <= ops.length <= 1000
ops[i] 为 "C"、"D"、"+",或者一个表示整数的字符串。整数范围是 [-3 * 104, 3 * 104]
对于 "+" 操作,题目数据保证记录此操作时前面总是存在两个有效的分数
对于 "C" 和 "D" 操作,题目数据保证记录此操作时前面总是存在一个有效的分数

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/baseball-game
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

下面附上我自己的代码:

class Solution {
       public int calPoints(String[] ops) {
        Stack<Integer> stack = new Stack<>();
        //遍历数组ops
        for (int i = 0; i < ops.length; i++) {
            //"+" - 表示本回合新获得的得分是前两次得分的总和
            if (ops[i].equals("+")) {
                int pre1 = stack.pop();
                int pre2 = stack.pop();
                int cur = pre1 + pre2;
                stack.push(pre2);
                stack.push(pre1);
                stack.push(cur);
            }
            //"D" - 表示本回合新获得的得分是前一次得分的两倍
            else if (ops[i].equals("D")) {
                stack.push(2 * stack.peek());
            }
            //"C" - 表示前一次得分无效,将其从记录中移除
            else if (ops[i].equals("C")) {
                stack.pop();
            } else {
                //若ops[i]是整数,压入栈
                //整数 x - 表示本回合新获得分数 x
                stack.push(Integer.valueOf(ops[i]));
            }
        }
        //对栈求和,得出所求分数
        int res = 0;
        while (!stack.isEmpty()) {
            res += stack.pop();
        }
        return res;
    }
}

相关文章

  • 棒球比赛

    你现在是棒球比赛记录员。给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在...

  • 棒球比赛

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

  • 棒球比赛

    昨天我们进行了一场棒球比赛,其实这比赛也不是真正的棒球比赛,连棒都没有。 我们打的是几个学过棒球的同学。一开局,我...

  • 游戏规则

    如果你要去参加一场棒球比赛,你得先了解棒球比赛的规则,棒球场有特定的形状和大小,在比赛时,每队只有9名队员上场比赛...

  • 682. 棒球比赛

    你现在是棒球比赛记录员。给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在...

  • 682. 棒球比赛

    你现在是棒球比赛记录员。给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在...

  • 682. 棒球比赛

    【题目描述】你现在是棒球比赛记录员。给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):...

  • 682. 棒球比赛

  • 一切体验无法被替代

    “我喜欢棒球。而且喜欢亲自去棒球场,观看眼前展开的现场比赛。我会戴着棒球帽,带上棒球手套,预备着若是坐内野区就接界...

  • 三年级新鲜事——棒球比赛

    三(3)班冯冠杰 周六下午我代表我们学校去侨乡棒球场参加棒球比赛。大家实力相当,比赛非常激烈。 我...

网友评论

      本文标题:棒球比赛

      本文链接:https://www.haomeiwen.com/subject/fmxctltx.html