返回
勒索未遂?LeetCode 19 棒球比赛记分员我来当!
前端
2023-12-22 18:41:08
在 LeetCode 第 19 道题中,你将化身棒球比赛记分员,根据赛场上发生的各种事件,实时更新比分。考验你代码功底的时候到了,准备好迎接挑战了吗?
本指南将带你领略棒球比赛记分员的风采,并通过 Python 语言详细解析解题思路,让你轻松掌握这道题目的精髓。
题目要求
棒球比赛记分员需要记录每局比赛的得分情况。比赛中,可能有以下几种事件发生:
- 整数:表示某名球员击球得分。
- "+": 表示本局比赛中,前两名击球得分球员的得分之和。
- "D": 表示本局比赛中,前一名击球得分球员得分的两倍。
- "C": 表示取消上一次击球得分球员的得分。
记分员需要根据这些事件,实时更新比分。
解题思路
本题的解题思路很简单,可以使用栈数据结构来模拟棒球比赛的记分过程。
- 初始化一个栈
stack
,用于存储每局比赛的得分情况。 - 对于题目给出的事件序列,逐个处理每个事件:
- 如果事件是整数,则将其压入栈中。
- 如果事件是 "+", 则将栈顶的两个元素弹出,相加后压入栈中。
- 如果事件是 "D", 则将栈顶的元素弹出,乘以 2 后压入栈中。
- 如果事件是 "C", 则将栈顶的元素弹出。
- 最后,栈中剩余的元素即为最终的比分。
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 的征途中旗开得胜!