用 Python 编写棒球比赛
pythonserver side programmingprogramming更新于 2023/11/10 7:45:00
假设我们有一个棒球比赛得分记录器。我们有一个字符串列表;每个字符串可以是以下 4 种类型之一 −
- 整数(一轮得分) − 表示我们在这一轮中获得的分数。
- "+"(一轮得分) − 表示我们在这一轮中获得的分数是前两轮有效分数的总和。
- "D"(一轮得分) − 表示我们在这一轮中获得的分数是上一轮有效分数的两倍数据。
- "C"(操作,不是一轮得分) −表示我们获得的最后一个有效回合的分数无效,应将其删除。
请注意,每轮操作都是永久性的,可能会对前一轮和后一轮产生影响。我们必须找到我们在所有回合中可以获得的分数之和。
因此,如果输入为 ["5","2","C","D","+"],则输出将为 30。这实际上是
- 第 1 轮 − 我们可以获得 5 分。总和为:5。
- 第 2 轮 − 我们可以获得 2 分。总和为:7。
- 操作 1 − 第 2 轮的数据无效。总分是:5。
- 第 3 轮 − 我们可以得到 10 分。总分是:15。
- 第 4 轮 − 我们可以得到 5 + 10 = 15 分。总和为:30。
要解决这个问题,我们将遵循以下步骤 −
- stack := 空列表
- 对于 ops 中的每个 i,执行
- 如果 i 与 "+" 相同,则
- first := stack[size of stack - 1], second := stack[size of stack - 2]
- 将 (first + second) 插入到堆栈末尾
- 否则,当 i 与 "D" 相同时,则
- 将 (last element of stack * 2) 插入到堆栈末尾
- 否则,当 i 与 "C" 相同时,则
- 从堆栈中删除最后一个元素
- 否则,
- 将 i 插入到堆栈末尾
- 返回堆栈所有元素的总和
让我们看看以下实现以获得更好的理解 −
示例
class Solution: def calPoints(self, ops): stack = [] for i in ops: if i == "+": first, second = stack[len(stack) - 1], stack[len(stack) - 2] stack.append(first + second) elif i == "D": stack.append(stack[-1] * 2) elif i == "C": stack.pop() else: stack.append(int(i)) return sum(stack) ob = Solution() print(ob.calPoints(["5","2","C","D","+"]))
输入
["5","2","C","D","+"]
输出
30
相关文章
- 如果 i 与 "+" 相同,则