047 · Baseball Game

algorithm
Published

June 29, 2026

Problem

你正在记录一场特殊棒球比赛的得分。

比赛由一串操作组成,每个操作都会影响当前的得分记录。

给定一个字符串数组 operations,请根据这些操作计算最后的总分。

每个操作可能是下面几种:

  • 一个整数:表示本轮得到这个分数
  • "+":表示本轮得分是前两轮有效得分之和
  • "D":表示本轮得分是前一轮有效得分的两倍
  • "C":表示取消前一轮有效得分

这里的“有效得分”指的是还没有被 "C" 取消掉的得分。

例如:

operations = ["5", "2", "C", "D", "+"]

按顺序看:

"5"  -> 记录 5
"2"  -> 记录 2
"C"  -> 取消 2
"D"  -> 前一轮有效得分是 5,所以记录 10
"+"  -> 前两轮有效得分是 5 和 10,所以记录 15

最后有效得分是:

5 + 10 + 15 = 30

所以答案是:

30

Examples

示例 1

Input:  operations = ["5", "2", "C", "D", "+"]
Output: 30

解释:"C" 取消了 2,后面记录了 1015,最后总分是 5 + 10 + 15 = 30

示例 2

Input:  operations = ["5", "-2", "4", "C", "D", "9", "+", "+"]
Output: 27

解释:

"5"  -> 记录 5
"-2" -> 记录 -2
"4"  -> 记录 4
"C"  -> 取消 4
"D"  -> 前一轮有效得分是 -2,所以记录 -4
"9"  -> 记录 9
"+"  -> 前两轮有效得分是 -4 和 9,所以记录 5
"+"  -> 前两轮有效得分是 9 和 5,所以记录 14

最后总分是:

5 + (-2) + (-4) + 9 + 5 + 14 = 27

示例 3

Input:  operations = ["1", "C"]
Output: 0

解释:先记录 1,然后用 "C" 取消它。最后没有有效得分,所以总分是 0

Constraints

  • \(1 \leq\) operations.length \(\leq 1000\)
  • operations[i]"+""D""C",或者一个表示整数的字符串
  • 整数范围是 \(-3 \times 10^4\)\(3 \times 10^4\)
  • 对于 "+" 操作,前面总是至少有两个有效得分
  • 对于 "D""C" 操作,前面总是至少有一个有效得分