返回

勒索未遂?LeetCode 19 棒球比赛记分员我来当!

前端

在 LeetCode 第 19 道题中,你将化身棒球比赛记分员,根据赛场上发生的各种事件,实时更新比分。考验你代码功底的时候到了,准备好迎接挑战了吗?

本指南将带你领略棒球比赛记分员的风采,并通过 Python 语言详细解析解题思路,让你轻松掌握这道题目的精髓。

题目要求

棒球比赛记分员需要记录每局比赛的得分情况。比赛中,可能有以下几种事件发生:

  • 整数:表示某名球员击球得分。
  • "+": 表示本局比赛中,前两名击球得分球员的得分之和。
  • "D": 表示本局比赛中,前一名击球得分球员得分的两倍。
  • "C": 表示取消上一次击球得分球员的得分。

记分员需要根据这些事件,实时更新比分。

解题思路

本题的解题思路很简单,可以使用栈数据结构来模拟棒球比赛的记分过程。

  1. 初始化一个栈stack,用于存储每局比赛的得分情况。
  2. 对于题目给出的事件序列,逐个处理每个事件:
    • 如果事件是整数,则将其压入栈中。
    • 如果事件是 "+", 则将栈顶的两个元素弹出,相加后压入栈中。
    • 如果事件是 "D", 则将栈顶的元素弹出,乘以 2 后压入栈中。
    • 如果事件是 "C", 则将栈顶的元素弹出。
  3. 最后,栈中剩余的元素即为最终的比分。

Python 代码实现

def calculate_baseball_score(events):
  """
  计算棒球比赛的得分。

  Args:
    events: 一个字符串列表,表示比赛中发生的事件。

  Returns:
    一个整数,表示最终的比分。
  """

  # 初始化栈
  stack = []

  # 逐个处理每个事件
  for event in events:
    if event.isdigit():
      # 整数,表示球员得分
      stack.append(int(event))
    elif event == "+":
      # "+", 表示前两名球员得分之和
      first = stack.pop()
      second = stack.pop()
      stack.append(first + second)
    elif event == "D":
      # "D", 表示前一名球员得分的两倍
      top = stack[-1]
      stack.append(top * 2)
    elif event == "C":
      # "C", 表示取消上一次击球得分球员的得分
      stack.pop()

  # 计算最终比分
  return sum(stack)


# 测试代码
events = ["5", "2", "C", "D", "+"]
score = calculate_baseball_score(events)
print(f"最终比分:{score}")

总结

LeetCode 19 棒球比赛记分员题目看似复杂,其实解题思路很简单,使用栈数据结构就可以轻松解决。希望这篇指南对你有帮助,祝你在 LeetCode 的征途中旗开得胜!